情景再现:在进行项目迁移时,之前是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 就到这里啦