情景再现:在进行项目迁移时,之前是net.sf.json处理,迁移后是com.alibaba.fastjson处理,这两者处理json串时会有些不同,在此记录一下。
案例展示:目标是把json串,转换成javabean对象。
1.net.sf.json处理json串如下:
@RequestMapping(value = "/query", method = RequestMethod.POST)
@ResponseBody
public String query(@RequestBody String body) {
//【1】把json串转化成json对象
JSONObject object = JSONObject.fromObject(body);//【!不同之处!】
//【2】根据json对象的属性值获取单个字段值
String name = (String) object.get("name");
//【3】根据json对象属性值获取list转换成json数组
JSONArray jsnoArray = (JSONArray) object.get("list");
//【4】遍历json数组
for (Iterator iter = jsnoArray.iterator(); iter.hasNext(); ) {
//【5】遍历出某个json对象
JSONObject jsonObject = (JSONObject) iter.next();
//【6】把json对象转换成javabean对象
User user=(User) JSONObject.toBean(jsonObject, User.class);//【!不同之处!】
//【7】得到javabean就可以进行其他操作
...
}
return "";
}
2.com.alibaba.fastjson处理json串如下:
@RequestMapping(value = "/query", method = RequestMethod.POST)
@ResponseBody
public String query(@RequestBody String body) {
//【1】把json串转化成json对象
JSONObject object = JSONObject.parseObject(body);//【!不同之处!】
//【2】根据json对象的属性值获取单个字段值
String name = (String) object.get("name");
//【3】根据json对象属性值获取list转换成json数组
JSONArray jsnoArray = (JSONArray) object.get("list");
//【4】遍历json数组
for (Iterator iter = jsnoArray.iterator(); iter.hasNext(); ) {
//【5】遍历出某个json对象
JSONObject jsonObject = (JSONObject) iter.next();
//【6】把json对象转换成javabean对象
User user= JSON.parseObject(jsonObject.toJSONString(), User.class);//【!不同之处!】
//【7】得到javabean就可以进行其他操作
...
}
return "";
}
最后总结两者区别:
【1】json转换json对象
net.sf.json使用:JSONObject object = JSONObject.fromObject(body);
com.alibaba.fastjson: JSONObject object = JSONObject.parseObject(body);
【2】json对象转换成javabean对象
net.sf.json使用:User user=(User) JSONObject.toBean(jsonObject, User.class);
com.alibaba.fastjson: User user= JSON.parseObject(jsonObject.toJSONString(), User.class);
ok 就到这里啦