如何获取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
相关产品推荐
相关产品推荐

