本文介绍了如何使用 Gson 库将复杂的 JSON 结构解析为 Java 对象。重点讲解了如何定义与 JSON 结构对应的 Java 类,并使用 @SerializedName 和 @Expose 注解来控制序列化和反序列化的行为。通过示例代码,演示了如何处理嵌套的 List 结构,以及如何避免常见的 MalformedJsonException 异常,帮助开发者更好地理解和应用 Gson 库。
Gson 是一个强大的 Java 库,用于在 Java 对象和 JSON 数据之间进行转换。在处理复杂的 JSON 结构时,正确地定义 Java 类以及使用 Gson 的相关注解至关重要。本文将详细介绍如何使用 Gson 将复杂的 JSON 数据解析为 Java 对象。
首先,需要根据 JSON 的结构定义相应的 Java 类。JSON 中的每个字段都应该在 Java 类中有一个对应的属性。例如,对于以下 JSON 结构:
{
"title": "title",
"product" : [
{
"key": "product1",
"value": [{
"valueName": "productValue1"
}],
"date" : "2025-10-11"
},
{
"key": "product2",
"value": []
},
"date" : "2025-10-11"
]
}可以定义以下 Java 类:
import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
import java.util.List;
public class ProductDTO {
@SerializedName("title")
@Expose
private String title;
@SerializedName("product")
@Expose
private List product = null;
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public List getProduct() {
return product;
}
public void setProduct(List product) {
this.product = product;
}
} import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
import java.util.List;
public class Product {
@SerializedName("key")
@Expose
private String key;
@SerializedName("value")
@Expose
private List value = null;
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
public List getValue() {
return value;
}
public void setValue(List value) {
this.value = value;
}
} import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
public class Value {
@SerializedName("valueName")
@Expose
private String valueName;
public String getValueName() {
return valueName;
}
public void setValueName(String valueName) {
this.valueName = valueName;
}
}注解说明:
,可以使用此注解进行映射。定义好 Java 类后,就可以使用 Gson 将 JSON 数据解析为 Java 对象了。
import com.google.gson.Gson;
public class GsonExample {
public static void main(String[] args) {
String jsonPayload = "{\n" +
" \"title\": \"title\",\n" +
" \"product\" : [\n" +
" {\n" +
" \"key\": \"product1\",\n" +
" \"value\": [{\n" +
" \"valueName\": \"productValue1\"\n" +
" }],\n" +
" \"date\" : \"2025-10-11\"\n" +
" },\n" +
" {\n" +
" \"key\": \"product2\",\n" +
" \"value\": []\n" +
" },\n" +
" \"date\" : \"2025-10-11\"\n" +
" ]\n" +
"}";
Gson gson = new Gson();
ProductDTO productDTO = gson.fromJson(jsonPayload, ProductDTO.class);
System.out.println("Title: " + productDTO.getTitle());
if (productDTO.getProduct() != null) {
for (Product product : productDTO.getProduct()) {
System.out.println(" Key: " + product.getKey());
if (product.getValue() != null) {
for (Value value : product.getValue()) {
System.out.println(" ValueName: " + value.getValueName());
}
} else {
System.out.println(" Value: null");
}
}
} else {
System.out.println("Product List: null");
}
}
}代码解释:
使用 Gson 解析 JSON 数据到 Java 对象需要正确定义 Java 类,并使用 @SerializedName 和 @Expose 注解来控制序列化和反序列化的行为。 此外,还需要注意异常处理、字段类型匹配和处理空值等问题。 掌握这些技巧可以更有效地使用 Gson 库处理复杂的 JSON 数据。