把嵌套Json转换成Java对象

本文介绍如何使用Google的Gson库解析复杂的嵌套JSON数据,包括如何定义JavaBean类来匹配JSON结构,并通过示例代码展示如何从JSON字符串中提取所需的数据。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

from: https://gxnotes.com/article/20205.html

问题描述

我希望能够从Java动作方法中的JSON字符串访问属性。该字符串可以通过简单的说myJsonString = object.getJson()。以下是字符串可以是什么样的示例:

{
    'title': 'ComputingandInformationsystems',
    'id': 1,
    'children': 'true',
    'groups': [{
        'title': 'LeveloneCIS',
        'id': 2,
        'children': 'true',
        'groups': [{
            'title': 'IntroToComputingandInternet',
            'id': 3,
            'children': 'false',
            'groups': []
        }]
    }]
}


在这个字符串中,每个JSON对象都包含一个其他JSON对象的数组。目的是提取一个ID列表,其中任何给定对象拥有包含其他JSON对象的组属性。我将Google的Gson视为一个潜在的JSON插件。任何人都可以提供某种形式的指导,说明如何从这个JSON字符串生成Java?


解决方案

Google Gson支持泛型和嵌套的bean。 JSON中的[]表示数组,应映射到Java集合,如List或纯Java数组。 JSON中的{}表示一个对象,应该映射到Java Map或者只是一些JavaBean类。
您有一个具有多个属性的JSON对象,groups属性表示相同类型的嵌套对象数组。这可以通过以下方法与Gson解析:

package com.stackoverflow.q1688099;

import java.util.List;
import com.google.gson.Gson;

public class Test {

    public static void main(String... args) throws Exception {
        String json = 
            "{"
                + "'title': 'Computing and Information systems',"
                + "'id' : 1,"
                + "'children' : 'true',"
                + "'groups' : [{"
                    + "'title' : 'Level one CIS',"
                    + "'id' : 2,"
                    + "'children' : 'true',"
                    + "'groups' : [{"
                        + "'title' : 'Intro To Computing and Internet',"
                        + "'id' : 3,"
                        + "'children': 'false',"
                        + "'groups':[]"
                    + "}]" 
                + "}]"
            + "}";

        // Now do the magic.
        Data data = new Gson().fromJson(json, Data.class);

        // Show it.
        System.out.println(data);
    }

}

class Data {
    private String title;
    private Long id;
    private Boolean children;
    private List<Data> groups;

    public String getTitle() { return title; }
    public Long getId() { return id; }
    public Boolean getChildren() { return children; }
    public List<Data> getGroups() { return groups; }

    public void setTitle(String title) { this.title = title; }
    public void setId(Long id) { this.id = id; }
    public void setChildren(Boolean children) { this.children = children; }
    public void setGroups(List<Data> groups) { this.groups = groups; }

    public String toString() {
        return String.format("title:%s,id:%d,children:%s,groups:%s", title, id, children, groups);
    }
}
### Java 创建对象接收嵌套 JSON 示例 为了处理复杂的嵌套 JSON 数据,在 Java 中通常会定义相应的实体类来映射 JSON 的结构。下面是一个具体的例子,展示如何创建能够接收并解析嵌套 JSON 对象Java 类。 假设有一个如下所示的 JSON 结构: ```json { "name": "example", "details": { "version": "1.0", "description": "This is an example" } } ``` #### 定义对应的 Java 实体类 针对上述 JSON 格式,可以设计两个相互关联的 Java 类 `Detail` 和 `ExampleObject` 来表示这个层次化的数据模型[^1]。 ```java public class Detail { private String version; private String description; // Getters and Setters public String getVersion() { return version; } public void setVersion(String version) { this.version = version; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } } public class ExampleObject { private String name; private Detail details; // Getters and Setters public String getName() { return name; } public void setName(String name) { this.name = name; } public Detail getDetails() { return details; } public void setDetails(Detail details) { this.details = details; } } ``` #### 使用 Gson 库进行序列化/反序列化 一旦有了合适的实体类之后,就可以利用像 Google 提供的 Gson 这样的库来进行 JSON 字符串到 Java 对象之间的换工作了。这里给出一段简单的代码片段用于演示如何完成这一过程。 ```java import com.google.gson.Gson; // ... String jsonString = "{\"name\":\"example\",\"details\":{\"version\":\"1.0\",\"description\":\"This is an example\"}}"; Gson gson = new Gson(); ExampleObject obj = gson.fromJson(jsonString, ExampleObject.class); System.out.println(obj.getName()); System.out.println(obj.getDetails().getVersion()); System.out.println(obj.getDetails().getDescription()); // 将 Java 对象JSON 字符串 String resultJson = gson.toJson(obj); System.out.println(resultJson); ``` 这段程序首先构建了一个包含嵌套属性的 JSON 字符串,并将其化为之前定义好的 `ExampleObject` 类型实例;接着又把该实例重新编码成了 JSON 文本形式输出出来验证结果是否一致。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值