fastjson对JSON字符串,JSON对象以及javaBean之间的相互转换
1,对于JSON对象与JSON格式字符串的转换可以直接用 toJSONString()这个方法。
2,javaBean与JSON格式字符串之间的转换要用到:JSON.toJSONString(obj);
3,javaBean与json对象间的转换使用:JSON.toJSON(obj),然后使用强制类型转换,JSONObject或者JSONArray。
方案一:
//如果demoList字段对应的是数组[],那么用以下方式正确拿到数据
JSONArray arrays = data.getJSONArray("demoList");
List<IdBean> idBeans = JSON.parseObject(arrays.toJSONString(), new TypeReference<List<IdBean>>() {});
可能arrays为空,所以推荐使用方案二。
方案二:(推荐)
String demoListStr = data.getString("demoList");
ArrayList<DemoBean> demoList = JSON.parseObject(demoListStr, new TypeReference<ArrayList<DemoBean>>() {});
return new DemoResponse(JSON.toJSON(demoList));
}
问题1:fastjson syntax error, expect {, actual string
是因为json字符串转成对象的时候,因为json字符串中,数组属性的字段,json字符串中是"[ ]",而不是[ ]。
解决方案:
1. 最笨的方法就是用String.replaceAll,替换[ ]前后的"双引号,以及\转移斜杠。
2.
问题2:nested exception is com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of java.lang.String out of START_ARRAY token
跟问题1相反,javaBean转成json字符串的时候,数组属性的字段会转成[ ],就会报这个错误,应该转成"[ ]"。
解决方案:
把字段类型定义为String,不要定义为对象数组。
fastjson List转JSONArray以及JSONArray转List
1.fastjson List转JSONArray
List<T> list = new ArrayList<T>();
JSONArray array= JSONArray.parseArray(JSON.toJSONString(list));
2.fastjson JSONArray转List
JSONArray array = new JSONArray();
List<EventColAttr> list = JSONObject.parseArray(array.toJSONString(), EventColAttr.class);
3.fastjson 字符串转List
String str = "";
List<T> list = JSONObject.parseArray(str,T.class);