- 常用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) {//已知JsonArrayJSONArray 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}
