位置: IT常识 - 正文

将json字符串与实体类互相转换(json与json字符串)

编辑:rootadmin
将json字符串与实体类互相转换 文章目录01.概述02.对json字符串进行解析使用实体类进行解析使用实体类解析拓展使用map进行解析03.Map和json字符串的互相转换3.1.json字符串转换为Map3.2.Map转换为json字符串04.json操作的一些小技巧4.1.json字符转换为实体类4.2.实体类转json字符串4.3.json字符串转换为json对象4.4.json对象转换为json字符串4.5.json字符串数组转换json数组4.6.List<实体类>转json数组4.7.json数组转List<实体类>05.josnObject操作的一些小技巧5.1.JSONObject中的数组提取为JSONArray5.2.JSONObject获取value06.总结01.概述

推荐整理分享将json字符串与实体类互相转换(json与json字符串),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:json字符串和json对象转换,json字符串和json对象,json字符串和json对象转换,json与json字符串,json字符串与字符串的区别,json与字符串互相转换,json字符串与json对象,json字符串与字符串的区别,内容如对您有帮助,希望把文章链接给更多的朋友!

如果我们接收到的是一个json字符串,我们该如何对该字符串进行解析?

方式一:使用实体类进行解析方式二:使用map进行解析

使用的依赖jar包:fastjson

compile('com.alibaba:fastjson:1.2.xx')02.对json字符串进行解析使用实体类进行解析

创建一个用于接收的实体类:使用json字符串中的那些字段,实体类的属性值一定要和JSON串中的key对应

假设JSON字符串如下:

"{\"bornTime\":\"2022-09-30 19:48:59\",\"userName\":\"AISMALL\",\"sex\":\"man\",\"age\":18}"

对应的实体类属性就应该定义成如下的样子:

public class PersonInfoDto { private Date bornTime; private String userName; private String sex; private Integer age; public Date getBornTime() { return bornTime; } public void setBornTime(Date bornTime) { this.bornTime = bornTime; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } @Override public String toString() { return "PersonInfoDto{" + "bornTime=" + bornTime + ", userName='" + userName + '\'' + ", sex='" + sex + '\'' + ", age=" + age + '}'; }}

代码示例:

public class test01 { public static void main(String[] args) { String jsonStr = "{\"bornTime\":\"2022-09-30 19:48:59\",\"userName\":\"AISMALL\",\"sex\":\"man\",\"age\":18}"; PersonInfoDto personInfoDto = JSONObject.parseObject(jsonStr, PersonInfoDto.class); System.out.println(personInfoDto.toString()); }}

运行结果:

PersonInfoDto{bornTime=Fri Sep 30 19:48:59 CST 2022, userName='AISMALL', sex='man', age=18}使用实体类解析拓展public class test01 { public static void main(String[] args) { // json串里面的key与实体类字段匹配几个就会赋值几个,匹配不上的赋值为null String jsonStr1 ="{\"bornTime\":\"2022-09-30 19:48:59\"}"; PersonInfoDto personInfoDto1 = JSONObject.parseObject(jsonStr1, PersonInfoDto.class); System.out.println("personInfoDto1: " + personInfoDto1); // json串中出现重复的字段,就会使用后者进行覆盖 String jsonStr2 ="{\"bornTime\":\"2022-09-30 19:48:59\",\"userName\":\"AISMALL\",\"userName\":\"AISMALL2\"}"; PersonInfoDto personInfoDto2 = JSONObject.parseObject(jsonStr2, PersonInfoDto.class); System.out.println("personInfoDto2: " + personInfoDto2); // json串里面的key与实体类字段匹配几个就会赋值几个,不管该传有多长,只取匹配到的key的value给实体类赋值 String jsonStr3 ="{\"bornTime\":\"2022-09-30 19:48:59\",\"userName\":\"AISMALL\",\"sex\":\"man\",\"age\":18,\"age2\":18}"; PersonInfoDto personInfoDto3 = JSONObject.parseObject(jsonStr3,PersonInfoDto.class); System.out.println("personInfoDto3: " + personInfoDto3); // 刚好对应的情况 String jsonStr4="{\"bornTime\":\"2022-09-30 19:48:59\",\"userName\":\"AISMALL\",\"sex\":\"man\",\"age\":18}"; PersonInfoDto personInfoDto4 = JSONObject.parseObject(jsonStr4, PersonInfoDto.class); System.out.println("personInfoDto4: " + personInfoDto4); }}

运行结果:

personInfoDto1: PersonInfoDto{bornTime=Fri Sep 30 19:48:59 CST 2022, userName='null', sex='null', age=null}personInfoDto2: PersonInfoDto{bornTime=Fri Sep 30 19:48:59 CST 2022, userName='AISMALL2', sex='null', age=null}personInfoDto3: PersonInfoDto{bornTime=Fri Sep 30 19:48:59 CST 2022, userName='AISMALL', sex='man', age=18}personInfoDto4: PersonInfoDto{bornTime=Fri Sep 30 19:48:59 CST 2022, userName='AISMALL', sex='man', age=18}

小结

json串里面的key与实体类字段匹配几个就会赋值几个,不管该传有多长,只取匹配到的key的value给实体类赋值,匹配不上的赋值为null。json串中出现重复的字段,就会使用后者进行覆盖。使用map进行解析public class test01 { public static void main(String[] args) { // json字符串 String jsonStr = "{\"age\":18,\"sex\":\"man1\",\"userName\":\"AISMALL1\"}"; //====================方式一============================== Map maps = (Map)JSON.parse(jsonStr); for (Object map : maps.entrySet()) { System.out.println(((Map.Entry)map).getKey()+": " + ((Map.Entry)map).getValue()); } //====================方式二============================== Map mapTypes =JSON.parseObject(jsonStr); for(Object obj :mapTypes.keySet()){ System.out.println("key: " + obj + " value: " + mapTypes.get(obj)); } //====================方式三============================== Map mapType = JSON.parseObject(jsonStr, Map.class); System.out.println("这个是用JSON类,指定解析类型,来解析JSON字符串!!!"); for(Object obj :mapType.keySet()){ System.out.println("key: " + obj + " value: " + mapType.get(obj)); } //====================方式四============================== Map json =(Map)JSONObject.parse(jsonStr); //用Json对象解析成Map类型 for (Object map : json.entrySet()){ System.out.println(((Map.Entry)map).getKey() + ": "+((Map.Entry)map).getValue()); } //====================方式五============================== JSONObject jsonobject = JSONObject.parseObject(jsonStr); for(Object map:jsonobject.entrySet()){ System.out.println(((Map.Entry)map).getKey()+": "+((Map.Entry)map).getValue()); } }}03.Map和json字符串的互相转换3.1.json字符串转换为Map

参考:使用map进行解析

3.2.Map转换为json字符串public class test01 { public static void main(String[] args) { // 创建一个Hashmap Map<String, Object> paraMap = new HashMap(); paraMap.put("userName","AISMALL"); paraMap.put("sex","man"); paraMap.put("age",18); // 方式一:转换为json字符串 String jsonStr = JSONObject.toJSONString(paraMap); System.out.println("jsonStr: " + jsonStr); // 方式二:转换为json字符串 String jsonStr2 = Json.toJson(paraMap); System.out.println("jsonStr2: " + jsonStr2); }}将json字符串与实体类互相转换(json与json字符串)

运行结果:

jsonStr: {"sex":"man","userName":"AISMALL","age":18}jsonStr2: {"sex":"man","userName":"AISMALL","age":18}04.json操作的一些小技巧4.1.json字符转换为实体类

前面已经介绍了:

JSONObject.parseObject(jsonString, PersonInfoDto .class);4.2.实体类转json字符串public class test01 { public static void main(String[] args) { Date date = new Date(); // 创建一个Date对象,获取当前时间 SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); // 指定格式化格式 f.format(date); // 将当前时间袼式化为指定的格式 PersonInfoDto personInfoDto = new PersonInfoDto(); personInfoDto.setBornTime(date); personInfoDto.setUserName("AISMALL"); personInfoDto.setSex("man"); personInfoDto.setAge(18); String jsonStr = JSON.toJSONString(personInfoDto); System.out.println(jsonStr); }}

运行结果:

{"age":18,"bornTime":1665113383685,"sex":"man","userName":"AISMALL"}4.3.json字符串转换为json对象public class test01 { public static void main(String[] args) { // json字符串 String jsonStr = "{\"test\":\"test\",\"Result\":[{\"Result1\":\"Result1\",\"Detail1\":\"Detail1\"},{\"Result2\":\"Result2\",\"Detail2\":\"Detail2\"},{\"Result3\":\"Result3\",\"Detail3\":\"Detail3\"}]}"; // json字符串转换为jsonObject JSONObject jSONObject = JSONObject.parseObject(jsonStr); System.out.println(jSONObject); // 根据Key取出Json对象中的值 String testStr = jSONObject.getString("test"); System.out.println("testStr: " + testStr); }}

运行结果:

{"test":"test","Result":[{"Detail1":"Detail1","Result1":"Result1"},{"Detail2":"Detail2","Result2":"Result2"},{"Detail3":"Detail3","Result3":"Result3"}]}testStr: test

注意:

Json对象和Json字符串的区别在于,Json对象(JSONObject)里面有很多定义好的方法可以帮助我们根据Key取出Json对象中的值,后面我们也会演示几个JSONObject提供的方法。4.4.json对象转换为json字符串public class test01 { public static void main(String[] args) { // json字符串 String jsonStr = "{\"test\":\"test\",\"Result\":[{\"Detail1\":\"Detail1\",\"Result1\":\"Result1\"},{\"Detail2\":\"Detail2\",\"Result2\":\"Result2\"},{\"Detail3\":\"Detail3\",\"Result3\":\"Result3\"}]}"; // json字符串转换为jsonObject JSONObject jSONObject = JSONObject.parseObject(jsonStr); // json对象转换为json字符串 String jsonObjectConv = JSON.toJSONString(jSONObject); System.out.println(jsonObjectConv); }}

运行结果:

{"test":"test","Result":[{"Detail1":"Detail1","Result1":"Result1"},{"Detail2":"Detail2","Result2":"Result2"},{"Detail3":"Detail3","Result3":"Result3"}]}4.5.json字符串数组转换json数组

注意:json字符串数组,即String是JSONArray格式的字符串

public class test01 { public static void main(String[] args) { // json字符串数组 String jsonArr = "[{\"Detail1\":\"Detail1\",\"Result1\":\"Result1\"},{\"Detail2\":\"Detail2\",\"Result2\":\"Result2\"},{\"Detail3\":\"Detail3\",\"Result3\":\"Result3\"}]"; JSONArray jsonArray= JSONArray.parseArray(jsonArr); // 转换成Json字符串数组之后,就可以遍历了,字符串是无法遍历的 for (Object jsonStr:jsonArray) { System.out.println(jsonStr); } }}

运行结果:

{"Detail1":"Detail1","Result1":"Result1"}{"Detail2":"Detail2","Result2":"Result2"}{"Detail3":"Detail3","Result3":"Result3"}4.6.List<实体类>转json数组public class test01 { public static void main(String[] args) { PersonInfoDto personInfoDto1 = new PersonInfoDto(); personInfoDto1.setUserName("AISMALL1"); personInfoDto1.setSex("man1"); personInfoDto1.setAge(18); PersonInfoDto personInfoDto2 = new PersonInfoDto(); personInfoDto2.setUserName("AISMALL2"); personInfoDto2.setSex("man2"); personInfoDto2.setAge(19); List<PersonInfoDto> list = new ArrayList<>(); list.add(personInfoDto1); list.add(personInfoDto2); // 转换为json字符串 String jsonStr = JSONObject.toJSONString(list); System.out.println("jsonStr: " + jsonStr); // json字符串转换为json数组 JSONArray jsonArray= JSONArray.parseArray(jsonStr); // 转换成Json字符串数组之后,就可以遍历了,字符串是无法遍历的 for (Object jsonStr1:jsonArray) { System.out.println(jsonStr1); } }}

运行结果:

jsonStr: [{"age":18,"sex":"man1","userName":"AISMALL1"},{"age":19,"sex":"man2","userName":"AISMALL2"}]{"sex":"man1","userName":"AISMALL1","age":18}{"sex":"man2","userName":"AISMALL2","age":19}4.7.json数组转List<实体类>public class test01 { public static void main(String[] args) { // json字符串数组 String jsonStr = "[{\"age\":18,\"sex\":\"man1\",\"userName\":\"AISMALL1\"},{\"age\":19,\"sex\":\"man2\",\"userName\":\"AISMALL2\"}]"; System.out.println("jsonStr: " + jsonStr); // json字符串转换为json数组 JSONArray jsonArray= JSONArray.parseArray(jsonStr); List<PersonInfoDto> personInfoDtoList = jsonArray.toJavaList(PersonInfoDto.class); for (PersonInfoDto personInfoDto:personInfoDtoList) { System.out.println("personInfoDto: " + personInfoDto); } }}

运行结果:

jsonStr: [{"age":18,"sex":"man1","userName":"AISMALL1"},{"age":19,"sex":"man2","userName":"AISMALL2"}]personInfoDto: PersonInfoDto{bornTime=null, userName='AISMALL1', sex='man1', age=18}personInfoDto: PersonInfoDto{bornTime=null, userName='AISMALL2', sex='man2', age=19}05.josnObject操作的一些小技巧

JSONObject如下:

{ "test": "test", "Result": [ { "Result1": "Result1", "Detail1": "Detail1" }, { "Result2": "Result2", "Detail2": "Detail2" }, { "Result3": "Result3", "Detail3": "Detail3" } ]}5.1.JSONObject中的数组提取为JSONArraypublic class test01 { public static void main(String[] args) { // json字符串 String jsonStr = "{\"test\":\"test\",\"Result\":[{\"Result1\":\"Result1\",\"Detail1\":\"Detail1\"},{\"Result2\":\"Result2\",\"Detail2\":\"Detail2\"},{\"Result3\":\"Result3\",\"Detail3\":\"Detail3\"}]}"; // json字符串转换为jsonObject JSONObject jSONObject = JSONObject.parseObject(jsonStr); // 获取里面的Json字符串数组 JSONArray jsonArray = jSONObject.getJSONArray("Result"); // 转换成Json字符串数组之后,就可以遍历了,字符串是无法遍历的 for (Object jsonStr2:jsonArray) { System.out.println(jsonStr2); } }}

运行结果

[{"Detail1":"Detail1","Result1":"Result1"},{"Detail2":"Detail2","Result2":"Result2"},{"Detail3":"Detail3","Result3":"Result3"}]5.2.JSONObject获取valuepublic class test01 { public static void main(String[] args) { // json字符串 String jsonStr = "{\"test\":\"test\",\"Result\":[{\"Result1\":\"Result1\",\"Detail1\":\"Detail1\"},{\"Result2\":\"Result2\",\"Detail2\":\"Detail2\"},{\"Result3\":\"Result3\",\"Detail3\":\"Detail3\"}]}"; // json字符串转换为jsonObject JSONObject jSONObject = JSONObject.parseObject(jsonStr); // 返回值为String类型 String testStr = jSONObject.getString("test"); System.out.println("testStr: " + testStr); // 返回值为Object类型 Object testObject = jSONObject.get("Result"); System.out.println("testObject: " + testObject); }}

运行结果:

testStr: testtestObject: [{"Detail1":"Detail1","Result1":"Result1"},{"Detail2":"Detail2","Result2":"Result2"},{"Detail3":"Detail3","Result3":"Result3"}]06.总结

更多方法可以去查看JSONArray,JSONObject的源码。

本文链接地址:https://www.jiuchutong.com/zhishi/292997.html 转载请保留说明!

上一篇:DTFT和DFT有何区别?一文为你讲解清楚(dtft与dfs)

下一篇:nodejs安装与卸载(高版本降为低版本)(node 卸载)

  • 逛逛号是旺旺号吗(逛逛号旺旺号是淘宝账号吗)

    逛逛号是旺旺号吗(逛逛号旺旺号是淘宝账号吗)

  • b站昵称多久可以改一次(b站昵称多久可以重置)

    b站昵称多久可以改一次(b站昵称多久可以重置)

  • 小米九pro什么时候上市(小米九pro什么时候出的)

    小米九pro什么时候上市(小米九pro什么时候出的)

  • qq默认的紫色气泡是什么主题(qq紫色的默认气泡怎么设置)

    qq默认的紫色气泡是什么主题(qq紫色的默认气泡怎么设置)

  • 宽带连接已拒绝远程连接因为未识别(宽带连接已拒绝远程连接因为未识别win11)

    宽带连接已拒绝远程连接因为未识别(宽带连接已拒绝远程连接因为未识别win11)

  • oppok3前置摄像头打不开是什么原因(oppok3前置摄像头升不起来怎么办)

    oppok3前置摄像头打不开是什么原因(oppok3前置摄像头升不起来怎么办)

  • 主板rgb接口在哪里(主板rgb接口怎么用)

    主板rgb接口在哪里(主板rgb接口怎么用)

  • 抖音开发者是谁,你知道不?(抖音谁开发的到现在多久了)

    抖音开发者是谁,你知道不?(抖音谁开发的到现在多久了)

  • 微信朋友动态怎么看一次就看不到了(微信朋友动态怎么弄)

    微信朋友动态怎么看一次就看不到了(微信朋友动态怎么弄)

  • ai hdr是什么拍照功能(相机中的hdr与ai是什么意思)

    ai hdr是什么拍照功能(相机中的hdr与ai是什么意思)

  • 优酷怎么看不了登录设备(优酷怎么看不了亮剑了)

    优酷怎么看不了登录设备(优酷怎么看不了亮剑了)

  • 钉钉呼叫受限是什么原因(钉钉电话呼叫受限)

    钉钉呼叫受限是什么原因(钉钉电话呼叫受限)

  • 苹果6手机用一会儿发烫什么原因(苹果6手机用一年就发烫)

    苹果6手机用一会儿发烫什么原因(苹果6手机用一年就发烫)

  • 华为连接airpods声音小(华为连接airpods pro怎么看电量)

    华为连接airpods声音小(华为连接airpods pro怎么看电量)

  • 华为p20上市时间(华为p20上市时间和价格)

    华为p20上市时间(华为p20上市时间和价格)

  • 4mm和6mm摄像头区别(摄像头4mm跟6mm区别)

    4mm和6mm摄像头区别(摄像头4mm跟6mm区别)

  • tplink已连接不可上网怎么回事(tplink已连接 但无法访问互联网)

    tplink已连接不可上网怎么回事(tplink已连接 但无法访问互联网)

  • z3i充电时间(z3i充电慢是什么原因)

    z3i充电时间(z3i充电慢是什么原因)

  • nfc一直开启耗电多吗(nfc一直打开耗电吗)

    nfc一直开启耗电多吗(nfc一直打开耗电吗)

  • ipad充电电量不涨(ipad明明在充电但电量始终不变)

    ipad充电电量不涨(ipad明明在充电但电量始终不变)

  • 在淘宝点退款,已经过了处理时间怎么办(淘宝退款成功还能反悔吗)

    在淘宝点退款,已经过了处理时间怎么办(淘宝退款成功还能反悔吗)

  • 天猫精灵支持哪些电视(天猫精灵支持哪些音乐app)

    天猫精灵支持哪些电视(天猫精灵支持哪些音乐app)

  • 微信美团外卖手机号码怎么更改(美团外卖在微信哪里找到)

    微信美团外卖手机号码怎么更改(美团外卖在微信哪里找到)

  • 华为nova5卡槽是哪个孔(nova5的卡槽)

    华为nova5卡槽是哪个孔(nova5的卡槽)

  • 钉钉怎么看员工请假(钉钉怎么看员工打卡照片)

    钉钉怎么看员工请假(钉钉怎么看员工打卡照片)

  • 联系号码如手机区号输0怎么填(手机电话号码如何)

    联系号码如手机区号输0怎么填(手机电话号码如何)

  • iphone11有128g吗(iphone11有128g内存吗)

    iphone11有128g吗(iphone11有128g内存吗)

  • 相机实况怎么打开(相机实况怎么打开小米)

    相机实况怎么打开(相机实况怎么打开小米)

  • 不可以运行的Linux命令:破坏系统(不能运行windows10的设备有哪些)

    不可以运行的Linux命令:破坏系统(不能运行windows10的设备有哪些)

  • 个体户定期定额征收标准
  • 北京增值税发票打印边距设置
  • 所得税汇算补提所得税会计分录
  • 综合所得税和单独计税
  • 白条技巧
  • 厂部固定资产折旧属于什么费用
  • 个体户核定双定户是否可以年度汇算清缴
  • 进项抵扣用不完怎么处理
  • 未达起征点是什么
  • 卖自用轿车要缴什么税
  • 基建贷款贴息账户有哪些
  • 运输过程中的货损责任
  • 多扣了离职人员的钱
  • 生产企业有哪些费用
  • 分配辅助生产车间成本记账凭证
  • 增值税哪些可以全额抵扣
  • 餐费可以抵扣吗怎么做账
  • 哪些情况需要变更船籍港
  • 一个月无纳税凭证怎么处理
  • 不动产进项税抵扣规定2016
  • 企业所得表怎么填写
  • 纳税人办理退税手续流程
  • 金融工具中股利是什么
  • 以前年度的账错了怎么办
  • 电费预提费用
  • jQuery+Ajax+PHP“喜欢”评级功能实现代码
  • 增值税的计税依据包括关税吗
  • php模式
  • php的教程
  • 悬崖边上的门
  • 阿德莱德 景点
  • 双色球python算法
  • 午夜太阳的意思
  • 哈特谢普苏特女王享殿
  • 可视化大屏的几种模式
  • 出口退还增值税消费税政策
  • 个人咨询服务费怎么交税
  • 固定资产和无形资产计提折旧时间
  • 资本化的后续支出
  • 未形成无形资产计入当期损益的
  • 织梦怎么调用当前栏目下的文章
  • sqlserver2008还原数据库 错误3624
  • 生产企业免抵退是什么意思
  • 退税流程怎么操作个人所得税2022
  • sqlserver2008无法连接到local用户登录失败
  • 分公司员工在总公司缴纳社保
  • 公司员工食堂买菜没发票怎么办
  • 股票期权的所得税处理
  • 企业投资期货亏损能抵税么
  • 公司办公室租金
  • 产品成本计算中最基本的方法是
  • 公司五金是哪五金
  • 财报实收资本
  • 转账时转错账号怎么办
  • 实收资本怎么入账?
  • 账簿设制的一般程序
  • mysql char函数
  • window怎么操作
  • windows7打游戏会卡怎么办
  • windows预览版计划
  • win10系统预览版
  • win10预览版好吗
  • xp系统硬盘管理
  • Linux中RedHat CentOS Ubuntu Fedora的区别详解
  • win10大更新2020
  • windows7模块安装程序可以关闭吗
  • linux消息队列阻塞
  • 如何更改win10管理员账户
  • 深入剖析kubernetes pdf
  • opengl的坐标系
  • 基于个人同意处理个人信息的个人什么撤回其同意
  • bat批处理字符串转ascii10进制规避特殊字符
  • javascript 函数定义
  • shell命令大全shell脚本编程100例
  • 安卓apk混淆工具
  • 蛋哥的日常
  • java教程
  • javascript编程技术
  • 国内海运费的运价表
  • 即使我单位是免税单位,签订合同时,也需要贴
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设