JSONObject和Gson用法详解

前端之家收集整理的这篇文章主要介绍了JSONObject和Gson用法详解前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

JSONObject和Gson用法详解

#

#

1.JSONObject使用方法详解

所需jar包

  1. json-lib-2.4-jdk15.jar
  2. commons-beanutils-1.8.3.jar
  3. commons-collections-3.2.1.jar
  4. commons-lang-2.5.jar
  5. commons-logging-1.1.1.jar
  6. ezmorph-1.0.6.jar

一般情况下除JSONObject的jar之外还需要依赖的其他5个jar包,如上所示

其中 JSONObject 目前最新的版本为2.4,其他版本下载地址为:http://sourceforge.net/projects/json-lib/files/json-lib/

常用的情景和实现方式

a.前台封装Json格式的数据后转成字符串(不包含复杂对象),后台用字符串接收,转成对应的类

  • 前台实现

    1. var params = {
    2. 'page': 1,'rows': 10,'pickUpTmStr': '2017-09-15 15:00','sendBackTmStr': '2017-09-16 15:00','day': '1','id': '123','sortType': 1
    3. };
    4. $.ajax({
    5. type: "POST",url: "${ctx}/w/com/selectRentalCarForPage.json.json",data: {'paramsStr' : JSON.stringify(params)},dataType:'json',success: function(msg){
    6. if(msg.resultCode=="SUCCESS"){
    7. alert(msg.resultMessage);
    8. }else{
    9. closeAllDialog();
    10. alert(msg.resultMessage);
    11. }
    12. }
    13. });
  • 后台实现

    1. @RequestMapping(value = "/selectRentalCarForPage.json",method = RequestMethod.POST)
    2. public @ResponseBody IPageModule selectRentalCarForPage(HttpServletRequest request,HttpServletResponse response,ModelMap model,String paramsStr) {
    3. IPageModule iPageModule =null;
    4. JSONObject jObjf = JSONObject.fromObject(paramsStr);
    5. Map<String,Object> paramsMap = (Map<String,Object>)JSONObject.toBean(jObjf,Map.class);
    6. try {
    7. iPageModule = rentalCarService.selectRentalCarForPage(paramsMap);
    8. } catch (Exception e) {
    9. e.printStackTrace();
    10. }
    11. return iPageModule;
    12. }

    此为将前台接收的参数转为Map,如需要转成实体类,则可以如下实现:

    1. JSONObject jObjf = JSONObject.fromObject(studentStr);
    2. Student student = (RentalCarIntent)JSONObject.toBean(jObjf,Student.class);

    注:若是将参数转为对应的实体类对象,前台封装参数时的key必须要与实体类中字段对应,否则会报错

b.前台封装Json格式的数据后转成字符串(不包含复杂对象),后台用字符串接收,转成对应的类

  • 前台实现

    1. var params = {
    2. 'page': 1,'sortType': 1
    3. 'student':{
    4. 'name':'小明','sexCd':10
    5. }
    6. };
    7. $.ajax({
    8. type: "POST",String paramsStr) {
    9. IPageModule iPageModule =null;
    10. JSONObject jObjf = JSONObject.fromObject(paramsStr);
    11. classMap.put("student",Student.class);
    12. Map<String,Map.class,classMap);
    13. try {
    14. iPageModule = rentalCarService.selectRentalCarForPage(paramsMap);
    15. } catch (Exception e) {
    16. e.printStackTrace();
    17. }
    18. return iPageModule;
    19. }

    此为将前台接收的参数转为Map,如需要转成实体类,则可以如下实现:

    1. JSONObject jObjf = JSONObject.fromObject(studentStr);
    2. Student student = (Student)JSONObject.toBean(jObjf,Student.class);

    注:若是将参数转为对应的实体类对象,前台封装参数时的key必须要与实体类中字段对应,否则会报错,包括类中复杂对象名称,都要一一对应

    另注:classMap用法介绍

    1. /**字符串转java bean时,字符串中如果出现类似List,Map,ArrayList、自定义的类型等复杂类型,解决方法如下:
    2. *1.Map<String,Class> classMap = new HashMap<String,Class>();
    3. *2.classMap.put("对象的那个特殊的属性名(集合)",集合中的对象名.class);
    4. *3.最后加上一个参数(JudgementRestaurant)JSONObject.toBean(jObjf,JudgementRestaurant.class,classMap);
    5. */

2. Gson使用方法详解

所需jar包

  1. gson-2.3.1.jar

常用的情景和实现方式

a.前台封装Json格式的数据后转成字符串(不包含复杂对象),后台用字符串接收,转成对应的类

  • 前台实现

    1. 同上(与JSONObject封装方法一致)
  • 后台实现

    1. //代码基本一致,只是转换稍有不同
    2. JsonObject obj = (JsonObject)new Gson().fromJson(zhouStr,JsonObject.class);
    3. JudgementFleet judgementFleet = new Gson().fromJson(obj.get("fleet"),JudgementFleet.class);
    4. //或者
    5. JudgementFleet judgementFleet = (JudgementFleet)new Gson().fromJson(zhouStr,JudgementFleet.class);
    6.  
    7. //list
    8. JSONObject jsonObject = JSONObject.fromObject(zhouStr);
    9. List<ProductDuty> productDutyList= (List<ProductDuty>)JSONArray.toCollection(jsonObject.getJSONArray("productDutyList"),ProductDuty.class);

重点发现

使用Json将字符串转换成实体类时,它会将所有的整数都变成浮点型,即所有的整数会加上’.0’,会导致后台判断出错,所以使用json的时候请格外注意,除此区别,没有复杂对象封装时,两者的转换效果是一样的

猜你在找的Json相关文章