我们如何在Java中解析嵌套的JSON对象?

什么是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 对象。

免责声明:本文来自互联网,本站所有信息(包括但不限于文字、视频、音频、数据及图表),不保证该信息的准确性、真实性、完整性、有效性、及时性、原创性等,版权归属于原作者,如无意侵犯媒体或个人知识产权,请来电或致函告之,本站将在第一时间处理。猿码集站发布此文目的在于促进信息交流,此文观点与本站立场无关,不承担任何责任。

后端开发标签