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

如何获取JSON对象中所有属性的名称(不含属性值)

获取JSON对象的所有属性名称(仅键名)

针对你需要从未知结构的JSON字符串中提取所有属性名称的需求,以下是几种主流编程语言的实现方案:

JavaScript

简单JSON结构

先将JSON字符串解析为对象,再用Object.keys()直接提取所有顶层键名:

const jsonStr = `{
  "aaaa": 1,
  "bbbb": "qwerty",
  "ccc": 21.22
}`;
const jsonObj = JSON.parse(jsonStr);
const keyNames = Object.keys(jsonObj);
console.log(keyNames); // 输出: ["aaaa", "bbbb", "ccc"]

嵌套JSON结构

如果JSON包含嵌套对象,可通过递归遍历提取所有层级的键名:

function extractAllKeys(obj) {
  let keys = [];
  for (const key in obj) {
    keys.push(key);
    // 判断当前值是否为非数组的对象,递归处理
    if (typeof obj[key] === 'object' && obj[key] !== null && !Array.isArray(obj[key])) {
      keys = keys.concat(extractAllKeys(obj[key]));
    }
  }
  return keys;
}

const nestedJsonStr = `{
  "aaaa": 1,
  "bbbb": {"x": "y", "z": 3},
  "ccc": 21.22
}`;
const nestedObj = JSON.parse(nestedJsonStr);
console.log(extractAllKeys(nestedObj)); // 输出: ["aaaa", "bbbb", "x", "z", "ccc"]

Python

简单JSON结构

使用内置的json模块解析字符串为字典,再通过keys()方法获取键名:

import json

json_str = '''{
  "aaaa": 1,
  "bbbb": "qwerty",
  "ccc": 21.22
}'''
json_dict = json.loads(json_str)
key_names = list(json_dict.keys())
print(key_names) # 输出: ['aaaa', 'bbbb', 'ccc']

嵌套JSON结构

递归遍历字典,收集所有层级的键名:

import json

def extract_all_keys(obj):
    keys = []
    if isinstance(obj, dict):
        for key, value in obj.items():
            keys.append(key)
            keys.extend(extract_all_keys(value))
    return keys

nested_json_str = '''{
  "aaaa": 1,
  "bbbb": {"x": "y", "z": 3},
  "ccc": 21.22
}'''
nested_dict = json.loads(nested_json_str)
print(extract_all_keys(nested_dict)) # 输出: ['aaaa', 'bbbb', 'x', 'z', 'ccc']

Java

以常用的Jackson库为例,解析JSON后遍历字段名:

依赖引入

如果使用Maven,需在pom.xml中添加Jackson依赖:

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

简单JSON结构

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

public class JsonKeyExtractor {
    public static void main(String[] args) throws IOException {
        String jsonStr = "{\n" +
                "  \"aaaa\": 1,\n" +
                "  \"bbbb\": \"qwerty\",\n" +
                "  \"ccc\": 21.22\n" +
                "}";

        ObjectMapper objectMapper = new ObjectMapper();
        JsonNode rootNode = objectMapper.readTree(jsonStr);
        List<String> keyNames = new ArrayList<>();

        Iterator<String> fieldNames = rootNode.fieldNames();
        while (fieldNames.hasNext()) {
            keyNames.add(fieldNames.next());
        }

        System.out.println(keyNames); // 输出: [aaaa, bbbb, ccc]
    }
}

嵌套JSON结构

添加递归方法提取所有层级键名:

// 承接上面的类,添加该方法
public static List<String> extractAllKeys(JsonNode node) {
    List<String> keys = new ArrayList<>();
    if (node.isObject()) {
        Iterator<String> fieldNames = node.fieldNames();
        while (fieldNames.hasNext()) {
            String key = fieldNames.next();
            keys.add(key);
            keys.addAll(extractAllKeys(node.get(key)));
        }
    }
    return keys;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 02:20:35