1. 程式人生 > 其它 >JSONObject 與 JSON 互轉

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字串,實體類物件) == 實體