Json。
文章目录
https://www.json.org/json-en.html
JSON(JavaScript Object Notation, JS 对象简谱)是一种轻量级的数据交换格式。它基于 ECMAScript(欧洲计算机协会制定的 js 规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。
数据表示。
数据结构。
- Object。
使用花括号 {} 包含的键值对结构,key 必须是 String 类型,value 为任意基本类型或数据结构。
- Array。
使用中括号 [] 来起始,并用逗号 , 来分隔元素。
基本类型。
string
number
true
false
null
使用(org.json)。
(org.json)。
https://github.com/stleary/JSON-java
- pom.xml。
<!-- https://mvnrepository.com/artifact/org.json/json -->
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20200518</version>
</dependency>
package com.geek;
import org.json.JSONObject;
public class JsonObjectSample {
public static void main(String[] args) {
jSONObject();
}
private static void jSONObject() {
Object nullObj = null;
JSONObject jsonObject = new JSONObject();
jsonObject.put("name", "王小二");
jsonObject.put("age", 25.2);
jsonObject.put("birthday", "1990-01-01");
jsonObject.put("school", "蓝翔");
jsonObject.put("major", new String[]{"理发", "挖掘机"});
jsonObject.put("has_girlfriend", false);
jsonObject.put("car", nullObj);
jsonObject.put("house", nullObj);
jsonObject.put("comment", "这是一个注释。");
System.out.println(jsonObject.toString());
// {"birthday":"1990-01-01","major":["理发","挖掘机"],"school":"蓝翔","name":"王小二","has_girlfriend":false,"comment":"这是一个注释。","age":25.2}
}
}
通过 HashMap 创建。
package com.geek;
import org.json.JSONObject;
import java.util.HashMap;
import java.util.Map;
public class JsonObjectSample {
public static void main(String[] args) {
// jSONObject();
createJsonByMap();
}
// 通过 HashMap 创建。
private static void createJsonByMap() {
Object nullObj = null;
Map<String, Object> map = new HashMap<>();
map.put("name", "王小二");
map.put("age", 25.2);
map.put("birthday", "1990-01-01");
map.put("school", "蓝翔");
map.put("major", new String[]{"理发", "挖掘机"});
map.put("has_girlfriend", false);
map.put("car", nullObj);
map.put("house", nullObj);
map.put("comment", "这是一个注释。");
System.out.println(new JSONObject(map).toString());
}
}
通过 JavaBean 创建。
package com.geek;
import com.geek.bean.Diaosi;
import org.json.JSONObject;
import java.util.HashMap;
import java.util.Map;
public class JsonObjectSample {
public static void main(String[] args) {
// jSONObject();
// createJsonByMap();
createJsonByBean();
}
private static void createJsonByBean() {
Diaosi diaosi = new Diaosi();
diaosi.setName("王小二");
diaosi.setAge(25.2);
diaosi.setBirthday("1990-01-01");
diaosi.setSchool("蓝翔");
diaosi.setMajor(new String[]{"理发", "挖掘机"});
diaosi.setHas_girlfriend(false);
diaosi.setCar(null);
diaosi.setHouse(null);
diaosi.setComment("这是一个注释。");
System.out.println(new JSONObject(diaosi));
// {"birthday":"1990-01-01","major":["理发","挖掘机"],"school":"蓝翔","name":"王小二","has_girlfriend":false,"comment":"这是一个注释。","age":25.2}
}
}
package com.geek.bean;
import java.util.Arrays;
public class Diaosi {
private String name;
private String school;
private boolean has_girlfriend;
private double age;
private Object car;
private Object house;
private String[] major;
private String birthday;
private String comment;
@Override
public String toString() {
return "Diaosi{" +
"name='" + name + '\'' +
", school='" + school + '\'' +
", has_girlfriend=" + has_girlfriend +
", age=" + age +
", car=" + car +
", house=" + house +
", major=" + Arrays.toString(major) +
", birthday='" + birthday + '\'' +
", comment='" + comment + '\'' +
'}';
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSchool() {
return school;
}
public void setSchool(String school) {
this.school = school;
}
public boolean isHas_girlfriend() {
return has_girlfriend;
}
public void setHas_girlfriend(boolean has_girlfriend) {
this.has_girlfriend = has_girlfriend;
}
public double getAge() {
return age;
}
public void setAge(double age) {
this.age = age;
}
public Object getCar() {
return car;
}
public void setCar(Object car) {
this.car = car;
}
public Object getHouse() {
return house;
}
public void setHouse(Object house) {
this.house = house;
}
public String[] getMajor() {
return major;
}
public void setMajor(String[] major) {
this.major = major;
}
public String getBirthday() {
return birthday;
}
public void setBirthday(String birthday) {
this.birthday = birthday;
}
public String getComment() {
return comment;
}
public void setComment(String comment) {
this.comment = comment;
}
}
从文件读取 JSON。
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
package com.geek;
import org.apache.commons.io.FileUtils;
import org.json.JSONObject;
import java.io.File;
import java.io.IOException;
public class ReadJson {
public static void main(String[] args) throws IOException {
// URL resource = ReadJson.class.getResource("/");
// System.out.println("resource = " + resource);
File file = new File(ReadJson.class.getResource("/wangxiaoer.json").getFile());
String content = FileUtils.readFileToString(file);
JSONObject jsonObject = new JSONObject(content);
System.out.println("jsonObject = " + jsonObject);
}
}
package com.geek;
import org.apache.commons.io.FileUtils;
import org.json.JSONArray;
import org.json.JSONObject;
import java.io.File;
import java.io.IOException;
public class ReadJson {
public static void main(String[] args) throws IOException {
// URL resource = ReadJson.class.getResource("/");
// System.out.println("resource = " + resource);
File file = new File(ReadJson.class.getResource("/wangxiaoer.json").getFile());
String content = FileUtils.readFileToString(file);
JSONObject jsonObject = new JSONObject(content);
System.out.println("jsonObject = " + jsonObject);
// jsonObject = {"birthday":"1990-01-01","major":["理发","挖掘机"],"school":"蓝翔","car":null,"name":"王小二","has_girlfriend":false,"comment":"这是一个注释。","house":null,"age":25.2}
System.out.println("姓名是:" + jsonObject.getString("name"));
// ...
JSONArray jsonArray = jsonObject.getJSONArray("major");
System.out.println("jsonArray = " + jsonArray);
for (Object o : jsonArray) {
System.out.println(o);
}
}
}
判断 null。
jsonObject.isNull(“name”)
GSON。
https://github.com/google/gson/
<!-- https://mvnrepository.com/artifact/com.google.code.gson/gson -->
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.6</version>
</dependency>
package com.geek;
import com.geek.bean.Diaosi;
import com.google.gson.Gson;
public class GsonCreateSample {
public static void main(String[] args) {
Diaosi diaosi = new Diaosi();
diaosi.setName("王小二");
diaosi.setAge(25.2);
diaosi.setBirthday("1990-01-01");
diaosi.setSchool("蓝翔");
diaosi.setMajor(new String[]{"理发", "挖掘机"});
diaosi.setHas_girlfriend(false);
diaosi.setCar(null);
diaosi.setHouse(null);
diaosi.setComment("这是一个注释。");
Gson gson = new Gson();
String s = gson.toJson(diaosi);
System.out.println("s = " + s);
// s = {"name":"王小二","school":"蓝翔","has_girlfriend":false,"age":25.2,"major":["理发","挖掘机"],"birthday":"1990-01-01","comment":"这是一个注释。"}
}
}
- 注解。
package com.geek.bean;
import com.google.gson.annotations.SerializedName;
import java.util.Arrays;
public class Diaosi {
@SerializedName("NAME")// 转换为 json 后为 NAME。
private String name;
private String school;
private boolean has_girlfriend;
private double age;
private Object car;
private Object house;
private String[] major;
private String birthday;
private String comment;
@Override
public String toString() {
return "Diaosi{" +
"name='" + name + '\'' +
", school='" + school + '\'' +
", has_girlfriend=" + has_girlfriend +
", age=" + age +
", car=" + car +
", house=" + house +
", major=" + Arrays.toString(major) +
", birthday='" + birthday + '\'' +
", comment='" + comment + '\'' +
'}';
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSchool() {
return school;
}
public void setSchool(String school) {
this.school = school;
}
public boolean isHas_girlfriend() {
return has_girlfriend;
}
public void setHas_girlfriend(boolean has_girlfriend) {
this.has_girlfriend = has_girlfriend;
}
public double getAge() {
return age;
}
public void setAge(double age) {
this.age = age;
}
public Object getCar() {
return car;
}
public void setCar(Object car) {
this.car = car;
}
public Object getHouse() {
return house;
}
public void setHouse(Object house) {
this.house = house;
}
public String[] getMajor() {
return major;
}
public void setMajor(String[] major) {
this.major = major;
}
public String getBirthday() {
return birthday;
}
public void setBirthday(String birthday) {
this.birthday = birthday;
}
public String getComment() {
return comment;
}
public void setComment(String comment) {
this.comment = comment;
}
}
~
s = {"NAME":"王小二","school":"蓝翔","has_girlfriend":false,"age":25.2,"major":["理发","挖掘机"],"birthday":"1990-01-01","comment":"这是一个注释。"}
- 美化功能。
GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.setPrettyPrinting();
Gson gson = gsonBuilder.create();
// Gson gson = new Gson();
String s = gson.toJson(diaosi);
System.out.println("s = " + s);
s = {
"NAME": "王小二",
"school": "蓝翔",
"has_girlfriend": false,
"age": 25.2,
"major": [
"理发",
"挖掘机"
],
"birthday": "1990-01-01",
"comment": "这是一个注释。"
}
GsonBuilder。
package com.geek;
import com.geek.bean.Diaosi;
import com.google.gson.FieldNamingStrategy;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import java.lang.reflect.Field;
public class GsonCreateSample {
public static void main(String[] args) {
Diaosi diaosi = new Diaosi();
diaosi.setName("王小二");
diaosi.setAge(25.2);
diaosi.setBirthday("1990-01-01");
diaosi.setSchool("蓝翔");
diaosi.setMajor(new String[]{"理发", "挖掘机"});
diaosi.setHas_girlfriend(false);
diaosi.setCar(null);
diaosi.setHouse(null);
diaosi.setComment("这是一个注释。");
GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.setPrettyPrinting();
gsonBuilder.setFieldNamingStrategy(new FieldNamingStrategy() {
@Override
public String translateName(Field field) {
if (field.getName().equals("name")) {
return "NAME";
}
return field.getName();
}
});
Gson gson = gsonBuilder.create();
// Gson gson = new Gson();
String s = gson.toJson(diaosi);
System.out.println("s = " + s);
// s = {"NAME":"王小二","school":"蓝翔","has_girlfriend":false,"age":25.2,"major":["理发","挖掘机"],"birthday":"1990-01-01","comment":"这是一个注释。"}
}
}
transient。
public class Diaosi {
// @SerializedName("NAME")// 转换为 json 后为 NAME。
private String name;
private String school;
private boolean has_girlfriend;
private double age;
private Object car;
private Object house;
private String[] major;
private String birthday;
private String comment;
// transient 关键字。
private transient String ignore;
public String getIgnore() {
return ignore;
}
public void setIgnore(String ignore) {
this.ignore = ignore;
}
生成的 json 中不会包含 ignore。
GSON 解析。
package com.geek;
import com.geek.bean.Diaosi;
import com.google.gson.Gson;
import org.apache.commons.io.FileUtils;
import java.io.File;
import java.io.IOException;
public class GsonRead {
public static void main(String[] args) throws IOException {
File file = new File(GsonRead.class.getResource("/wangxiaoer.json").getFile());
String content = FileUtils.readFileToString(file);
Gson gson = new Gson();
Diaosi diaosi = gson.fromJson(content, Diaosi.class);
System.out.println("diaosi = " + diaosi);
}
}
Date。
private Date birthday;
package com.geek;
import com.geek.bean.DiaosiWithBirthday;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import org.apache.commons.io.FileUtils;
import java.io.File;
import java.io.IOException;
public class GsonRead {
public static void main(String[] args) throws IOException {
File file = new File(GsonRead.class.getResource("/wangxiaoer.json").getFile());
String content = FileUtils.readFileToString(file);
Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd").create();
DiaosiWithBirthday diaosiWithBirthday = gson.fromJson(content, DiaosiWithBirthday.class);
System.out.println("diaosiWithBirthday = " + diaosiWithBirthday);
}
}
集合类解析。
private List<String> major;
package com.geek;
import com.geek.bean.Diaosi;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import org.apache.commons.io.FileUtils;
import java.io.File;
import java.io.IOException;
public class GsonRead {
public static void main(String[] args) throws IOException {
File file = new File(GsonRead.class.getResource("/wangxiaoer.json").getFile());
String content = FileUtils.readFileToString(file);
Gson gson = new GsonBuilder().setDateFormat("yyyy-MM-dd").create();
Diaosi diaosi = gson.fromJson(content, Diaosi.class);
System.out.println(diaosi.getMajor());// [理发, 挖掘机]
System.out.println(diaosi.getMajor().getClass());
// class java.util.ArrayList
}
}
private Set major;
class java.util.LinkedHashSet