You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Java中从JSON对象获取嵌套的roles列表?

在Java中提取JSON中的roles列表

下面介绍三种常用的Java JSON处理方案,直接实现从给定JSON中提取roles列表:

方法1:使用Jackson库

Jackson是Java生态中最常用的JSON处理工具,支持树形解析和POJO映射两种方式:

依赖引入(Maven)

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-databind</artifactId>
    <version>2.15.2</version>
</dependency>

树形解析(无需定义实体类)

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class JacksonTreeParse {
    public static void main(String[] args) throws IOException {
        String jsonStr = "{\n" +
                "  \"typ\": \"Bearer\",\n" +
                "  \"azp\": \"idp-e4f9cb79-0c4f-46a4-8b5f-34dc05e39138\",\n" +
                "  \"session_state\": \"9698bd84-6465-4947-98e9-2b477cd119aa\",\n" +
                "  \"acr\": \"1\",\n" +
                "  \"resource_access\": {\n" +
                "    \"thg-hbgs\": {\n" +
                "      \"roles\": [\n" +
                "        \"Admin\",\n" +
                "        \"Manager\",\n" +
                "        \"Clerk\"\n" +
                "      ]\n" +
                "    }\n" +
                "  },\n" +
                "  \"scope\": \"openid profile email\",\n" +
                "  \"sid\": \"9699bd84-6465-4947-98e9-2b477cd119aa\",\n" +
                "  \"email_verified\": true\n" +
                "}";

        ObjectMapper mapper = new ObjectMapper();
        JsonNode root = mapper.readTree(jsonStr);
        
        // 逐层定位到roles数组
        JsonNode rolesNode = root.path("resource_access").path("thg-hbgs").path("roles");
        
        List<String> roles = new ArrayList<>();
        if (rolesNode.isArray()) {
            for (JsonNode role : rolesNode) {
                roles.add(role.asText());
            }
        }
        
        System.out.println(roles); // 输出 [Admin, Manager, Clerk]
    }
}

POJO映射(适合结构化场景)

先定义对应JSON结构的实体类:

class AuthToken {
    private ResourceAccess resource_access;
    
    // getter/setter
    public ResourceAccess getResource_access() {
        return resource_access;
    }
    public void setResource_access(ResourceAccess resource_access) {
        this.resource_access = resource_access;
    }
}

class ResourceAccess {
    @JsonProperty("thg-hbgs")
    private ThgHbgs thgHbgs;
    
    // getter/setter
    public ThgHbgs getThgHbgs() {
        return thgHbgs;
    }
    public void setThgHbgs(ThgHbgs thgHbgs) {
        this.thgHbgs = thgHbgs;
    }
}

class ThgHbgs {
    private List<String> roles;
    
    // getter/setter
    public List<String> getRoles() {
        return roles;
    }
    public void setRoles(List<String> roles) {
        this.roles = roles;
    }
}

然后解析提取:

AuthToken token = mapper.readValue(jsonStr, AuthToken.class);
List<String> roles = token.getResource_access().getThgHbgs().getRoles();

方法2:使用Gson库

Gson是Google推出的轻量JSON处理库,用法简洁:

依赖引入(Maven)

<dependency>
    <groupId>com.google.code.gson</groupId>
    <artifactId>gson</artifactId>
    <version>2.10.1</version>
</dependency>

代码示例

import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import java.util.ArrayList;
import java.util.List;

public class GsonParse {
    public static void main(String[] args) {
        String jsonStr = "你的JSON字符串";
        
        JsonObject root = JsonParser.parseString(jsonStr).getAsJsonObject();
        JsonObject resourceAccess = root.getAsJsonObject("resource_access");
        JsonObject thgHbgs = resourceAccess.getAsJsonObject("thg-hbgs");
        JsonArray rolesArray = thgHbgs.getAsJsonArray("roles");
        
        List<String> roles = new ArrayList<>();
        for (int i = 0; i < rolesArray.size(); i++) {
            roles.add(rolesArray.get(i).getAsString());
        }
        
        System.out.println(roles);
    }
}

方法3:使用org.json库(原生风格)

适合简单场景的轻量库,无需复杂依赖:

依赖引入(Maven)

<dependency>
    <groupId>org.json</groupId>
    <artifactId>json</artifactId>
    <version>20230618</version>
</dependency>

代码示例

import org.json.JSONArray;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.List;

public class OrgJsonParse {
    public static void main(String[] args) {
        String jsonStr = "你的JSON字符串";
        
        JSONObject root = new JSONObject(jsonStr);
        JSONObject resourceAccess = root.getJSONObject("resource_access");
        JSONObject thgHbgs = resourceAccess.getJSONObject("thg-hbgs");
        JSONArray rolesArray = thgHbgs.getJSONArray("roles");
        
        List<String> roles = new ArrayList<>();
        for (int i = 0; i < rolesArray.length(); i++) {
            roles.add(rolesArray.getString(i));
        }
        
        System.out.println(roles);
    }
}

内容的提问来源于stack exchange,提问作者Abhijit Mondal Abhi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 17:02:46