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

在PowerShell中如何访问嵌套对象的指定子键名称?

解决JSON嵌套层级子键名称获取与ArrayList构建问题

先给出示例JSON数据:

{
  "person": {
    "johndoe": {
      "family_address": "123 Main St",
      "children": ["Alice", "Bob"],
      "years_activity": 5
    }
  }
}

实现思路

核心是先定位到person->johndoe层级的JSON对象,再遍历它的所有子键名称,根据子键对应值的类型(是否为复杂结构)决定是否仅将键名加入ArrayList。

方案1:使用org.json库实现

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

public class JsonKeyExtractor {
    public static void main(String[] args) {
        // 示例JSON字符串
        String jsonData = "{\"person\":{\"johndoe\":{\"family_address\":\"123 Main St\",\"children\":[\"Alice\",\"Bob\"],\"years_activity\":5}}}";
        
        // 解析JSON根对象
        JSONObject rootObj = new JSONObject(jsonData);
        // 定位到johndoe层级的对象
        JSONObject johnDoeObj = rootObj.getJSONObject("person").getJSONObject("johndoe");
        
        ArrayList<String> keyList = new ArrayList<>();
        
        // 遍历johndoe对象的所有子键
        for (String key : johnDoeObj.keySet()) {
            Object value = johnDoeObj.get(key);
            // 子键对应值为非复杂类型(非对象、非数组)时,直接加入键名
            if (!(value instanceof JSONObject) && !(value instanceof org.json.JSONArray)) {
                keyList.add(key);
            } else {
                // 若子键是复杂结构,按需求仅加入键名(可根据业务扩展处理内部结构)
                keyList.add(key);
            }
        }
        
        // 输出结果
        System.out.println(keyList);
        // 输出:[family_address, children, years_activity]
    }
}

方案2:使用Jackson库实现

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Map;

public class JacksonKeyExtractor {
    public static void main(String[] args) throws Exception {
        String jsonData = "{\"person\":{\"johndoe\":{\"family_address\":\"123 Main St\",\"children\":[\"Alice\",\"Bob\"],\"years_activity\":5}}}";
        
        ObjectMapper mapper = new ObjectMapper();
        JsonNode rootNode = mapper.readTree(jsonData);
        // 定位到johndoe层级的节点
        JsonNode johnDoeNode = rootNode.path("person").path("johndoe");
        
        ArrayList<String> keyList = new ArrayList<>();
        
        // 遍历子节点的键值对
        Iterator<Map.Entry<String, JsonNode>> fieldIterator = johnDoeNode.fields();
        while (fieldIterator.hasNext()) {
            Map.Entry<String, JsonNode> entry = fieldIterator.next();
            String key = entry.getKey();
            JsonNode value = entry.getValue();
            
            // 判断值是否为简单类型
            if (!value.isObject() && !value.isArray()) {
                keyList.add(key);
            } else {
                keyList.add(key);
            }
        }
        
        System.out.println(keyList);
    }
}

关键说明

  • 两种方案的核心都是先定位目标嵌套对象,再通过键集遍历获取子键名称
  • 可根据实际业务需求调整复杂类型子键的处理逻辑(比如递归提取内部键名)
  • 需确保项目中引入对应JSON库的依赖(如org.json或Jackson Databind)

内容的提问来源于stack exchange,提问作者Ichigo Kurosaki

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 19:23:23