JSONObject 与 JSON 互转

 

转自:

https://blog.csdn.net/u014799292/article/details/80692897

 

 

JSONObject 与 JSON 互转

使用目的

目前数据交互大多以 JSON 字符串为信息传输,主要格式有

{“age”:”22″,”name”:”李四”}

[{“age”:”21″,”name”:”张三”}]

最常见的应用场景是前后端对接,第三方平台文档对接,下面展示转换使用。

一、引入 jar , 此处引入 com.alibaba.fastjson 版本的jar包

  1.           <dependency>
  2.   <groupId>com.alibaba</groupId>
  3.   <artifactId>fastjson</artifactId>
  4.   <version> 1.1.31</version>
  5.   </dependency>

二、建立测试类对象

  1.   class Student {
  2.   private String name;
  3.   private String age;
  4.    
  5.   public String getName() {
  6.   return name;
  7.   }
  8.    
  9.   public void setName(String name) {
  10.   this.name = name;
  11.   }
  12.    
  13.   public String getAge() {
  14.   return age;
  15.   }
  16.    
  17.   public void setAge(String age) {
  18.   this.age = age;
  19.   }
  20.    
  21.   }

三、转换

1、对象 转 JSON
  1.           Student stu1 = new Student();
  2.   stu1.setName( “张三”);
  3.   stu1.setAge( “21”);
  4.    
  5.   String stu1Json = JSONObject.toJSONString(stu1);

输出:

{"age":"21","name":"张三"}
2、JSON 转 对象
  1.           Student stu1to = JSON.parseObject(stu1Json, Student.class);
  2.   System.out.println( “json 转对象:”);
  3.   System.out.println(stu1to);
  4.   System.out.println(stu1to.getName());
  5.   System.out.println(stu1to.getAge());

输出:

  1.   json 转对象:
  2.   Student@ 2aae9190
  3.   张三
  4.   21

注:JSON键名要与对象属性名相对应

3、对象数组 转 JSON
  1.           Student stu2 = new Student();
  2.   stu2.setName( “李四”);
  3.   stu2.setAge( “22”);
  4.   List<Student> list = new ArrayList<Student>();
  5.   list.add(stu1);
  6.   list.add(stu2);
  7.    
  8.   String listJson = JSONObject.toJSONString(list);
  9.   System.out.println(listJson);

输出:

[{"age":"21","name":"张三"},{"age":"22","name":"李四"}]
4、JSON 转 对象数组
  1.           List<Student> studentList = JSON.parseArray(listJson, Student.class);
  2.   for (Student student : studentList) {
  3.   System.out.println(student.getName());
  4.   }

输出:

  1.   json 数组格式转换对象
  2.   张三
  3.   李四
5、JSON多级组合,适用于请求文档传输参数
  1.           JSONObject jsona = new JSONObject();
  2.   jsona.put( “number”, “1”);
  3.   JSONObject jsonb = new JSONObject();
  4.   jsonb.put( “listMap”, list);
  5.    
  6.   JSONObject jsonAll = new JSONObject();
  7.   jsonAll.put( “jsona”, jsona);
  8.   jsonAll.put( “jsonb”, jsonb);
  9.   String jsonAllStr =JSONObject.toJSONString(jsonAll);
  10.   System.out.println(jsonAllStr);

输出:

{"jsona":{"number":"1"},"jsonb":{"listMap":[{"age":"21","name":"张三"},{"age":"22","name":"李四"}]}}
6、多级 JSON 组合

6.1、只获取指定字段,接上方示例代码

  1.   String getJsona = JSON.parseObject(jsonAllStr).getString( “jsona”);
  2.   String strjsona = JSON.parseObject(getJsona, String.class); //指定获取 字段名对象信息,如果为单个String可不指定,这里作为实例写出
  3.   System.out.println( “只拿jsona信息”);
  4.   System.out.println(strjsona);

输出:

  1.   只拿jsona信息
  2.   { “number”:“1”}

6.2、获取指定字段对象

  1.       String getJsonb = JSON.parseObject(jsonAllStr).getString( “jsonb”);
  2.   String getJsonbb = JSON.parseObject(getJsonb).getString( “listMap”);    //这里被二级包裹,所以要获取2次才能转换对象数组
  3.   List<Student> strjsonb = JSON.parseArray(getJsonbb, Student.class);
  4.   System.out.println( “只拿jsonbb信息”);
  5.   System.out.println(strjsonb);

输出:

  1.   只拿jsonbb信息
  2.   [Student@ 3d04a311, Student@7a46a697]
  3.