zoukankan      html  css  js  c++  java
  • 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]
  • 相关阅读:
    java基础篇 之 非静态内部类
    java基础篇 之 super关键字的理解
    Spring Cloud学习 之 Spring Cloud Ribbon(负载均衡策略)
    java基础篇 之 接口
    java基础篇 之 构造器内部的多态行为
    Spring Cloud学习 之 Spring Cloud Ribbon(负载均衡器源码分析)
    Spring Cloud学习 之 Spring Cloud Ribbon(执行流程源码分析)
    Spring Cloud 学习 之 Spring Cloud Ribbon(基础知识铺垫)
    计算机网络基础
    Python异常处理
  • 原文地址:https://www.cnblogs.com/wsnan/p/11944292.html
Copyright © 2011-2022 走看看