JSONObject 與 JSON 互轉
阿新 • • 發佈:2018-11-19
使用目的
目前資料互動大多以 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 轉物件:
[email protected]
張三
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資訊
[[email protected], [email protected]]