参考:https://blog.csdn.net/sunpanlong123/article/details/123649997
阿里fastjson的用法
【重点】fastjson的使用——JSON字符串、JSON对象、Java对象的互转

  1. <!--操作JSON字符串-->
  2. <dependency>
  3. <groupId>com.alibaba</groupId>
  4. <artifactId>fastjson</artifactId>
  5. <version>1.2.80</version>
  6. </dependency>

常用API

如果是object,可以先把object转成字符串
JSON._toJSONString_(map.get("company"))

注意:Object直接转JAVA对象是不可以的

如下方法会报错
BaseCompany company = (BaseCompany) map.get("company");
java.util.LinkedHashMap cannot be cast to com.tj.base.domain.BaseCompany
正确方法:先把Object转成json字符串,再通过json字符串转java对象或java列表的方法进行转换

字符串转成JSON对象

  1. JSON.parseObject(String text)
  2. JSON.parse(String text)

字符串转成JSON数组

  1. JSON.parseArray(String text)
  2. JSONArray array = JSONObject.parseArray("[1,2,3]");
  3. JSON.parse(String text)

字符串转成Java对象

  1. JSON.parseObject(String text, Class<T> clazz)

字符串转成Java对象列表

  1. JSON.parseArray(String text, Class<T> clazz)

Java对象转成JSON对象

  1. JSONObject.toJSON(Object javaObject)
  2. JSON.toJSON(Object javaObject)

Java对象列表转成JSON数组

  1. JSONArray.toJSON(Object javaObject)
  2. JSON.toJSON(Object javaObject)

JSON对象转成Java对象

  1. JSON.toJavaObject(JSON json, Class<T> clazz)
  2. jsonObject.toJavaObject(JSON json) (非静态方法)

JSON数组转成Java对象列表

  1. jsonArray.toJavaList(Class<T> clazz) (非静态方法)

java对象转字符串

  1. String jsonStr = jsonObject.toJSONString(Object javaObject);

json数组转字符串

  1. String arrStr = JSONArray.toJSONString(JSONArray jsonArray);

思维导图说明,用两张图可以看的更清楚

c398d3464379cf821c1fe04659d8872b_1023718-20210815185132793-705519034.png

67591cddabdcf2f08e518d72533b8e10_1023718-20210815185145724-1622360880.png

FastJson解析字符串主要用到的类

JSON:fastJson的解析器,用于JSON格式字符串与JSON对象及javaBean之间的转换。
JSONObject:fastJson提供的json对象。
JSONArray:fastJson提供json数组对象。

二、FastJson解析嵌套的json字符串

  1. String result ="{\"content\":\"{\\\"个人档案编号\\\":\\\"123123\\\",\\\"接种信息列表\\\":[{\\\"生产企业\\\":\\\"武汉生物\\\",\\\"剂次\\\":\\\"1\\\",\\\"接种日期\\\":\\\"2021-00-09\n" +
  2. "10:20:13\\\",\\\"疫苗名称\\\":\\\"新冠疫苗(Vero细胞)\\\",\\\"接种地\\\":\\\"上海市\\\"},{\\\"生产企业\\\":\\\"武汉生物\\\",\\\"剂次\\\":\\\"2\\\",\\\"接种日期\\\":\\\"2021-06-05\n" +
  3. "12:00:56\\\",\\\"疫苗名称\\\":\\\"新冠疫苗(Vero细胞)\\\",\\\"接种地\\\":\\\"上海市\\\"},{\\\"生产企业\\\":\\\"武汉生物\\\",\\\"剂次\\\":\\\"3\\\",\\\"接种日期\\\":\\\"2022-01-15\n" +
  4. "14:17:23\\\",\\\"疫苗名称\\\":\\\"新冠疫苗(Vero细胞)\\\",\\\"接种地\\\":\\\"上海市\\\"}],\\\"证件号码\\\":\\\"31022113951114571x\\\",\\\"个案状态\\\":\\\"正常\\\",\\\"国籍\\\":\\\"中国\\\",\\\"证件类型\\\":\\\"居民身份证\\\"}\",\"message\":\"success\"}";
  5. JSONObject jsonObject = (JSONObject) JSON.parse(result);
  6. String content = jsonObject.get("content").toString();
  7. JSONObject jsonObject2 = (JSONObject) JSON.parse(content);
  8. JSONArray arrayJson = jsonObject2.getJSONArray("接种信息列表");
  9. System.out.println(arrayJson);
  10. for (Object display : arrayJson) {
  11. JSONObject object = JSONObject.parseObject(display.toString());
  12. HashMap<Object, Object> mapYM = new HashMap<>();
  13. mapYM.put("scqy",object.get("生产企业"));
  14. mapYM.put("jc",object.get("剂次"));
  15. mapYM.put("jzrq",object.get("接种日期"));
  16. mapYM.put("ymmc",object.get("疫苗名称"));
  17. mapYM.put("ymjzd",object.get("接种地"));
  18. map.put(object.get("剂次").toString(),mapYM);
  19. }
  20. }
  21. return map;

3.JavaBean与Json对象之间的转化

3.1 json对象转Javabean

方法一 参考Fastjson 简明教程

  1. //JSON字符串
  2. String jsonObject = JSON.toJSONString(person);
  3. //直接转换json字符串
  4. Person newPerson = JSON.parseObject(jsonObject, Person.class);

方法二 参考:fastjson复杂json转换为java对象

  1. // 将Json字符串通过fastjson转为JSONObject对象
  2. JSONObject jsonObject = JSONObject.parseObject(userJson);
  3. // 将JSONObject对象转为StockMesBean实体对象
  4. UserBean user = JSON.toJavaObject(jsonObject, UserBean.class);

方法三

  1. //字符串转换成JSONObject对象
  2. JSONObject jsonObject = JSONObject.parseObject(beanStr);
  3. //第一种方式:使用TypeRefernce<T>,由于其构造方式使用protected进行修饰,故创建其子类
  4. Datapoint datapoint = JSONObject.parseObject(jsonObject.toJSONString(),new TypeReference<Datapoint>() {});

map对象转JAVA对象

  1. //方法一
  2. //map转JSON字符串
  3. String jsonString = JSONObject.toJSONString(map);
  4. //第一种方式:使用TypeRefernce<T>, WxUserlist是要转的java对象
  5. WxUserlist wxUserlist = JSONObject.parseObject(jsonString, new TypeReference<WxUserlist>() {
  6. });
  7. log.info("{}:{}", n, wxUserlist.getAvatar());
  8. //方法二:map转JAVA对象
  9. User info = JSON.parseObject(JSON.toJSONString(map.get("info")), User.class);

3.2Javabean转json对象

  1. String jsonString = JSONObject.toJSONString(datapoint);

4.JavaList对象数组与JsonArray之间的转化

  1. /**
  2. * 将JavaBeanList 转化为JsonArray
  3. */
  4. private static void testJavaListToJsonArray() {
  5. //模拟一个List<JabaBean>
  6. Location location1 = new Location();
  7. Location location2 = new Location();
  8. Datapoint datapoint1 = new Datapoint();
  9. Datapoint datapoint2 = new Datapoint();
  10. List<Datapoint> datapoints = new ArrayList<Datapoint>();
  11. location1.setLon("1122");
  12. location1.setLat("2233");
  13. datapoint1.setAt("2018-01-02");
  14. datapoint1.setValue(location1);
  15. datapoints.add(datapoint1);
  16. location2.setLon("3344");
  17. location2.setLat("4455");
  18. datapoint2.setAt("2018-01-03");
  19. datapoint2.setValue(location2);
  20. datapoints.add(datapoint2);
  21. //方法一:
  22. String arrString = JSONArray.toJSONString(datapoints);
  23. JSONArray jsonArray = JSONArray.parseArray(arrString);
  24. System.out.println(jsonArray);
  25. //方法二:
  26. JSONArray jsonArray1 = (JSONArray) JSONArray.toJSON(datapoints);
  27. System.out.println(jsonArray1);
  28. }
  29. //JavaList与JsonArray之间的转换
  30. private static void testJsonArrayToJavaList(String jsonString) {
  31. //已知JsonArray
  32. JSONArray jsonArray = testJsonStrToJSONArray(jsonString);
  33. //方法一:使用TypeReference<T>类,由于其构造方法使用protected进行修饰,故创造其子类
  34. List<Datapoint> datapoints = JSONArray.parseObject(jsonArray.toJSONString(),new TypeReference<ArrayList<Datapoint>>() {});
  35. System.out.println(datapoints);
  36. //方法二:使用Gson的思想
  37. List<Datapoint> datapoints1 = JSONArray.parseArray(jsonArray.toJSONString(),Datapoint.class);
  38. System.out.println();
  39. }

5.json字符串转map

  1. JSONObject obj = new JSONObject();
  2. {
  3. obj.put("key1", "value1");
  4. obj.put("key2", "value2");
  5. obj.put("key3", "value3");
  6. }
  7. Map<String, String> params = JSONObject.parseObject(obj.toJSONString(), new TypeReference<Map<String, String>>(){});
  8. System.out.println(params);
  9. //输出:{key3=value3, key2=value2, key1=value1}