什么是JSON?
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,使用易于读写的文本格式,自然地集成到 JavaScript 中,因此是一种很流行的数据交换格式。
JSON对象
JSON 对象是使用花括号包裹的键值对形式的数据结构,键值对之间使用逗号隔开。值有以下几种形式:
字符串(必须使用双引号包裹)
数字
布尔值
null
数组
另一个 JSON 对象
{
"name": "John",
"age": 30,
"isMarried": true,
"hobbies": ["reading", "swimming", "cooking"],
"address": {
"street": "Main Street",
"number": 12
}
}
嵌套的JSON对象
JSON 对象可以包含另一个 JSON 对象,形成嵌套的结构。
{
"name": "John",
"age": 30,
"isMarried": true,
"hobbies": ["reading", "swimming", "cooking"],
"address": {
"street": "Main Street",
"number": 12,
"city": {
"name": "New York",
"country": "USA"
}
}
}
Java中解析JSON
Java 有许多解析 JSON 的库可供选择,比如:
Google Gson
Jackson
JSON.simple
我们以 Google Gson 为例,介绍如何解析嵌套的 JSON 对象。
使用Gson解析简单的JSON对象
首先,我们需要添加 Gson 库的依赖:
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.5</version>
</dependency>
假设我们有以下 JSON 字符串:
{
"name": "John",
"age": 30,
"isMarried": true
}
我们可以使用 Gson 将它转换为一个 Java 对象:
import com.google.gson.Gson;
public class Person {
private String name;
private int age;
private boolean isMarried;
public static void main(String[] args) {
String json = "{\"name\":\"John\",\"age\":30,\"isMarried\":true}";
Gson gson = new Gson();
Person person = gson.fromJson(json, Person.class);
System.out.println(person.getName());
System.out.println(person.getAge());
System.out.println(person.isMarried());
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public boolean isMarried() {
return isMarried;
}
public void setMarried(boolean married) {
isMarried = married;
}
}
这段代码输出:
John
30
true
从 JSON 串中可以看出,属性名与 Java 对象的属性名一一对应,使用 Gson 的 fromJson 方法可以将 JSON 字符串转换为 Java 对象。
使用Gson解析嵌套的JSON对象
如果 JSON 对象中包含另一个 JSON 对象,我们可以定义一个 Java 类来表示这个嵌套的 JSON 对象。
import com.google.gson.Gson;
public class Person {
private String name;
private int age;
private boolean isMarried;
private Address address;
public static void main(String[] args) {
String json = "{\"name\":\"John\",\"age\":30,\"isMarried\":true,\"address\":{\"street\":\"Main Street\",\"number\":12,\"city\":{\"name\":\"New York\",\"country\":\"USA\"}}}";
Gson gson = new Gson();
Person person = gson.fromJson(json, Person.class);
System.out.println(person.getName());
System.out.println(person.getAddress().getStreet());
System.out.println(person.getAddress().getNumber());
System.out.println(person.getAddress().getCity().getName());
System.out.println(person.getAddress().getCity().getCountry());
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public boolean isMarried() {
return isMarried;
}
public void setMarried(boolean married) {
isMarried = married;
}
public Address getAddress() {
return address;
}
public void setAddress(Address address) {
this.address = address;
}
}
class Address {
private String street;
private int number;
private City city;
public String getStreet() {
return street;
}
public void setStreet(String street) {
this.street = street;
}
public int getNumber() {
return number;
}
public void setNumber(int number) {
this.number = number;
}
public City getCity() {
return city;
}
public void setCity(City city) {
this.city = city;
}
}
class City {
private String name;
private String country;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}
}
这段代码输出:
John
Main Street
12
New York
USA
与解析简单的 JSON 对象相比,嵌套的 JSON 对象需要我们定义一个 Java 类来表示它。在这个类中,我们可以定义嵌套的对象作为属性,Gson 会自动将嵌套的 JSON 对象转换为对应的 Java 对象。
结论
在 Java 中解析嵌套的 JSON 对象,我们可以使用 Gson 这样的 JSON 解析库。通过定义 Java 类来表示 JSON 对象,我们可以方便地将复杂的 JSON 对象转换为对应的 Java 对象。