文章目录

  • 01.概述
  • 02.对json字符串进行解析
    • 使用实体类进行解析
    • 使用实体类解析拓展
    • 使用map进行解析
  • 03.Map和json字符串的互相转换
    • 3.1.json字符串转换为Map
    • 3.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中的数组提取为JSONArray
    • 5.2.JSONObject获取value
  • 06.总结

01.概述

如果我们接收到的是一个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;}@Overridepublic 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与实体类字段匹配几个就会赋值几个,匹配不上的赋值为nullString 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) {// 创建一个HashmapMap<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);}
}

运行结果:

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字符串转换为jsonObjectJSONObject 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字符串转换为jsonObjectJSONObject 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中的数组提取为JSONArray

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字符串转换为jsonObjectJSONObject 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获取value

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字符串转换为jsonObjectJSONObject 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: test
testObject: [{"Detail1":"Detail1","Result1":"Result1"},{"Detail2":"Detail2","Result2":"Result2"},{"Detail3":"Detail3","Result3":"Result3"}]

06.总结

更多方法可以去查看JSONArrayJSONObject的源码。

将json字符串与实体类互相转换相关推荐

  1. JSON字符串和实体类的相互转化

    文章目录 首先导入fastjson依赖 1.json字符串转化为java实体类 (parseObject) 2.json字符串转化为list对象 (parseArray) 3.json字符串转化为复杂 ...

  2. 关于spring MVC 绑定json字符串与实体类绑定

    1 如果前台传json字符串,后台用@RequestBody 接收 前端 "content-Type":"application/json", 2  前台用fo ...

  3. JSON与实体类的转换

    json字符串转为实体类: 引用jar包:  com.alibaba.fastjson.JSONObject; Dept dept= JSONObject.parseObject(response, ...

  4. C#实现json、xml与实体类互相转换

    首先是json与实体类之间的的转换,现有如下json数据: {"Content": "中午12点开会","ResultCode": &quo ...

  5. Android JSON数据与实体类之间的相互转化-------GSON的简单用法

    Android JSON数据与实体类之间的相互转化-------GSON的用法 1_Gson的导入 1.1_方法一:直接导入jar包 1.2_方法二:引入依赖 2_json形式的字符串互转实体对象 2 ...

  6. android开发学习 ------- json数据与实体类之间的相互转换

    在网络请求的时候,会返回给我们实体类,我们需要将实体类转化为json字符串,方便处理数据: 有时候也会将json数据转换为实体类. 在Android Studio中,json要互相转换,需要用到gso ...

  7. Json对象与Json字符串的转化、JSON字符串与Java对象的转换

    一.Json对象与Json字符串的转化 1.jQuery插件支持的转换方式: $.parseJSON( jsonstr ); //jQuery.parseJSON(jsonstr),可以将json字符 ...

  8. jackson 实体转json json字符串转实体

    @Autowired ObjectMapper objectMapper; //实体转json String data = "";  //一个json串 Student stu = ...

  9. json java typeof_Json对象与Json字符串的转化、JSON字符串与Java对象的转换

    一.Json对象与Json字符串的转化 1.jQuery插件支持的转换方式: $.parseJSON( jsonstr ); //jQuery.parseJSON(jsonstr),可以将json字符 ...

最新文章

  1. 生产路由跳转报错找不到js路径问题
  2. [NewLife.XCode]百亿级性能
  3. java中intvalue_Java Number intValue()方法与示例
  4. Java自学笔记(16):常用类:Math,Data和Calender,Format,Scanner
  5. 关于小程序的一些坑的总结
  6. 【Python AsciiArt】利用命令行打印出字符图案
  7. 面对疫情等群体性危机,程序员如何在家高效办公?
  8. 《从Excel到R 数据分析进阶指南》一第1章 生成数据表1.1 导入数据表
  9. 开源linux 二进制工具,谷歌开源二进制文件对比工具 BinDiff
  10. Promise的简单使用例子
  11. 【python笔记】:python简介
  12. 需求分析岗的一点总结
  13. 虚拟机Ubuntut tftp服务不启动,service tftpd-hpa restart 失败的处理
  14. 数据库——求候选键的方法
  15. Spring学记笔记
  16. 香港常见问题扫盲贴(港币兑换/签注直飞/刷卡/酒店押金/关税/香港上网)
  17. HTML复习之基础标签
  18. css【详解】grid布局—— 网格布局(栅格布局)
  19. 计算机时代杂志好吗,计算机时代是什么级别的刊物
  20. php怎么爬取亚马逊的数据,php 抓取亚马逊中国产品数据-标题,价格,首图片

热门文章

  1. foss测试_2014年FOSS十大法律发展
  2. token为什么要存放在本地存储和vuex两个地方
  3. 自动报加班系统(Automatic Baojiaban Xitong,ABX)
  4. HDFS missing blocks的处理办法
  5. 一文搞懂数据在内存中的存储
  6. 51nod 1029 大数除法
  7. 又一款全自动装卸车神器
  8. [BZOJ4455][Zjoi2016]小星星
  9. java 的httpentity_java – 为什么作者使用EntityUtils.consume(httpEntity);?
  10. python3怎么使用qstring_QString 的用法