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字符串,实体类对象) == 实体
  • 相关阅读:
    第十二章学习笔记
    UVa OJ 107 The Cat in the Hat (戴帽子的猫)
    UVa OJ 123 Searching Quickly (快速查找)
    UVa OJ 119 Greedy Gift Givers (贪婪的送礼者)
    UVa OJ 113 Power of Cryptography (密文的乘方)
    UVa OJ 112 Tree Summing (树的求和)
    UVa OJ 641 Do the Untwist (解密工作)
    UVa OJ 105 The Skyline Problem (地平线问题)
    UVa OJ 100 The 3n + 1 problem (3n + 1问题)
    UVa OJ 121 Pipe Fitters (装管子)
  • 原文地址:https://www.cnblogs.com/cy0628/p/15179801.html
Copyright © 2011-2022 走看看