- 常用API
- 思维导图说明,用两张图可以看的更清楚
- ">
- FastJson解析字符串主要用到的类
- 嵌套的json字符串">二、FastJson解析嵌套的json字符串
- 4.JavaList对象数组与JsonArray之间的转化
- 5.json字符串转map
参考:https://blog.csdn.net/sunpanlong123/article/details/123649997
阿里fastjson的用法
【重点】fastjson的使用——JSON字符串、JSON对象、Java对象的互转
<!--操作JSON字符串-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.80</version>
</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对象
JSON.parseObject(String text)
JSON.parse(String text)
字符串转成JSON数组
JSON.parseArray(String text)
JSONArray array = JSONObject.parseArray("[1,2,3]");
JSON.parse(String text)
字符串转成Java对象
JSON.parseObject(String text, Class<T> clazz)
字符串转成Java对象列表
JSON.parseArray(String text, Class<T> clazz)
Java对象转成JSON对象
JSONObject.toJSON(Object javaObject)
JSON.toJSON(Object javaObject)
Java对象列表转成JSON数组
JSONArray.toJSON(Object javaObject)
JSON.toJSON(Object javaObject)
JSON对象转成Java对象
JSON.toJavaObject(JSON json, Class<T> clazz)
jsonObject.toJavaObject(JSON json) (非静态方法)
JSON数组转成Java对象列表
jsonArray.toJavaList(Class<T> clazz) (非静态方法)
java对象转字符串
String jsonStr = jsonObject.toJSONString(Object javaObject);
json数组转字符串
String arrStr = JSONArray.toJSONString(JSONArray jsonArray);
思维导图说明,用两张图可以看的更清楚
FastJson解析字符串主要用到的类
JSON:fastJson的解析器,用于JSON格式字符串与JSON对象及javaBean之间的转换。
JSONObject:fastJson提供的json对象。
JSONArray:fastJson提供json数组对象。
二、FastJson解析嵌套的json字符串
String result ="{\"content\":\"{\\\"个人档案编号\\\":\\\"123123\\\",\\\"接种信息列表\\\":[{\\\"生产企业\\\":\\\"武汉生物\\\",\\\"剂次\\\":\\\"1\\\",\\\"接种日期\\\":\\\"2021-00-09\n" +
"10:20:13\\\",\\\"疫苗名称\\\":\\\"新冠疫苗(Vero细胞)\\\",\\\"接种地\\\":\\\"上海市\\\"},{\\\"生产企业\\\":\\\"武汉生物\\\",\\\"剂次\\\":\\\"2\\\",\\\"接种日期\\\":\\\"2021-06-05\n" +
"12:00:56\\\",\\\"疫苗名称\\\":\\\"新冠疫苗(Vero细胞)\\\",\\\"接种地\\\":\\\"上海市\\\"},{\\\"生产企业\\\":\\\"武汉生物\\\",\\\"剂次\\\":\\\"3\\\",\\\"接种日期\\\":\\\"2022-01-15\n" +
"14:17:23\\\",\\\"疫苗名称\\\":\\\"新冠疫苗(Vero细胞)\\\",\\\"接种地\\\":\\\"上海市\\\"}],\\\"证件号码\\\":\\\"31022113951114571x\\\",\\\"个案状态\\\":\\\"正常\\\",\\\"国籍\\\":\\\"中国\\\",\\\"证件类型\\\":\\\"居民身份证\\\"}\",\"message\":\"success\"}";
JSONObject jsonObject = (JSONObject) JSON.parse(result);
String content = jsonObject.get("content").toString();
JSONObject jsonObject2 = (JSONObject) JSON.parse(content);
JSONArray arrayJson = jsonObject2.getJSONArray("接种信息列表");
System.out.println(arrayJson);
for (Object display : arrayJson) {
JSONObject object = JSONObject.parseObject(display.toString());
HashMap<Object, Object> mapYM = new HashMap<>();
mapYM.put("scqy",object.get("生产企业"));
mapYM.put("jc",object.get("剂次"));
mapYM.put("jzrq",object.get("接种日期"));
mapYM.put("ymmc",object.get("疫苗名称"));
mapYM.put("ymjzd",object.get("接种地"));
map.put(object.get("剂次").toString(),mapYM);
}
}
return map;
3.JavaBean与Json对象之间的转化
3.1 json对象转Javabean
方法一 参考Fastjson 简明教程
//JSON字符串
String jsonObject = JSON.toJSONString(person);
//直接转换json字符串
Person newPerson = JSON.parseObject(jsonObject, Person.class);
方法二 参考:fastjson复杂json转换为java对象
// 将Json字符串通过fastjson转为JSONObject对象
JSONObject jsonObject = JSONObject.parseObject(userJson);
// 将JSONObject对象转为StockMesBean实体对象
UserBean user = JSON.toJavaObject(jsonObject, UserBean.class);
方法三
//字符串转换成JSONObject对象
JSONObject jsonObject = JSONObject.parseObject(beanStr);
//第一种方式:使用TypeRefernce<T>,由于其构造方式使用protected进行修饰,故创建其子类
Datapoint datapoint = JSONObject.parseObject(jsonObject.toJSONString(),new TypeReference<Datapoint>() {});
map对象转JAVA对象
//方法一
//map转JSON字符串
String jsonString = JSONObject.toJSONString(map);
//第一种方式:使用TypeRefernce<T>, WxUserlist是要转的java对象
WxUserlist wxUserlist = JSONObject.parseObject(jsonString, new TypeReference<WxUserlist>() {
});
log.info("{}:{}", n, wxUserlist.getAvatar());
//方法二:map转JAVA对象
User info = JSON.parseObject(JSON.toJSONString(map.get("info")), User.class);
3.2Javabean转json对象
String jsonString = JSONObject.toJSONString(datapoint);
4.JavaList对象数组与JsonArray之间的转化
/**
* 将JavaBeanList 转化为JsonArray
*/
private static void testJavaListToJsonArray() {
//模拟一个List<JabaBean>
Location location1 = new Location();
Location location2 = new Location();
Datapoint datapoint1 = new Datapoint();
Datapoint datapoint2 = new Datapoint();
List<Datapoint> datapoints = new ArrayList<Datapoint>();
location1.setLon("1122");
location1.setLat("2233");
datapoint1.setAt("2018-01-02");
datapoint1.setValue(location1);
datapoints.add(datapoint1);
location2.setLon("3344");
location2.setLat("4455");
datapoint2.setAt("2018-01-03");
datapoint2.setValue(location2);
datapoints.add(datapoint2);
//方法一:
String arrString = JSONArray.toJSONString(datapoints);
JSONArray jsonArray = JSONArray.parseArray(arrString);
System.out.println(jsonArray);
//方法二:
JSONArray jsonArray1 = (JSONArray) JSONArray.toJSON(datapoints);
System.out.println(jsonArray1);
}
//JavaList与JsonArray之间的转换
private static void testJsonArrayToJavaList(String jsonString) {
//已知JsonArray
JSONArray jsonArray = testJsonStrToJSONArray(jsonString);
//方法一:使用TypeReference<T>类,由于其构造方法使用protected进行修饰,故创造其子类
List<Datapoint> datapoints = JSONArray.parseObject(jsonArray.toJSONString(),new TypeReference<ArrayList<Datapoint>>() {});
System.out.println(datapoints);
//方法二:使用Gson的思想
List<Datapoint> datapoints1 = JSONArray.parseArray(jsonArray.toJSONString(),Datapoint.class);
System.out.println();
}
5.json字符串转map
JSONObject obj = new JSONObject();
{
obj.put("key1", "value1");
obj.put("key2", "value2");
obj.put("key3", "value3");
}
Map<String, String> params = JSONObject.parseObject(obj.toJSONString(), new TypeReference<Map<String, String>>(){});
System.out.println(params);
//输出:{key3=value3, key2=value2, key1=value1}