zoukankan      html  css  js  c++  java
  • JSONObject 与 JSON 互转

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

    {"age":"22","name":"李四"}

    [{"age":"21","name":"张三"}]

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

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

            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>fastjson</artifactId>
                <version>1.1.31</version>
            </dependency>

    二、建立测试类对象

    class Student {
        private String name;
        private String age;
     
        public String getName() {
            return name;
        }
     
        public void setName(String name) {
            this.name = name;
        }
     
        public String getAge() {
            return age;
        }
     
        public void setAge(String age) {
            this.age = age;
        }
     
    }

    三、转换

    1、对象 转 JSON
            Student stu1 = new Student();
            stu1.setName("张三");
            stu1.setAge("21");
     
            String stu1Json = JSONObject.toJSONString(stu1);

    输出:

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

    输出:

    json 转对象:
    Student@2aae9190
    张三
    21

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

    3、对象数组 转 JSON
            Student stu2 = new Student();
            stu2.setName("李四");
            stu2.setAge("22");
            List<Student> list = new ArrayList<Student>();
            list.add(stu1);
            list.add(stu2);
     
            String listJson = JSONObject.toJSONString(list);
            System.out.println(listJson);

    输出:

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

    输出:

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

    输出:

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

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

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

    输出:

    只拿jsona信息
    {"number":"1"}

    6.2、获取指定字段对象

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

    输出:

    只拿jsonbb信息
    [Student@3d04a311, Student@7a46a697]
    总结:
    JSONObject与String、实体类互相转换
    //实体类对象转换成String类型的JSON字符串 JSONObject.toJSONString(实体类对象) == String //String类型的JSON字符串转换成实体类对象 JSONObject.toJavaObject(JSON字符串,实体类对象) == 实体 //Json字符串转换成JSONObject对象 JSONObject.parseObject(JSON字符串) == JSONObject //JSON字符串转换成实体类对象 JSONObject.parseObject(JSON字符串,实体类对象) == 实体
  • 相关阅读:
    Mybatis JPA 插件简介(v2.1.0)
    linux-非root用户运行tomcat
    java版Web Socket,实现消息推送
    开源巨献:Google最热门60款开源项目
    java加密算法AES与RSA
    Jquery table元素操作-创建|数据填充|重置|隐藏行
    Mybatis JPA-集成方案+源码
    Mybatis JPA 插件简介
    eclipse maven构建
    初探JSP运行机制和与Servlet间的关系
  • 原文地址:https://www.cnblogs.com/cy0628/p/15179801.html
Copyright © 2011-2022 走看看