如何忽略路径从JSON文件中提取所有指定Key对应的值
提取JSON中所有层级的
content值解决方案 要提取所有嵌套层级里的content对应值,不管它在哪个层级,你可以用深度遍历的方式,或者借助专门的JSON查询工具,下面是两种常用语言的实现方案:
Python 实现
方法1:递归遍历(无需额外依赖)
自己写递归函数,遍历JSON里的所有字典和列表,遇到content键就把对应值收集起来:
def extract_contents(data): contents = [] if isinstance(data, dict): # 检查当前字典是否有content键 if 'content' in data: contents.append(data['content']) # 递归遍历字典里的每个值 for value in data.values(): contents.extend(extract_contents(value)) elif isinstance(data, list): # 递归遍历列表里的每个元素 for item in data: contents.extend(extract_contents(item)) return contents # 你的JSON数据 json_data = { "body": [ { "content": "abcd" }, { "content": "test" }, { "paragraph": { "content": "ok" } } ] } # 调用函数提取结果 result = extract_contents(json_data) print(result) # 输出: ['abcd', 'test', 'ok']
方法2:用jsonpath-ng库(更简洁)
先安装依赖:pip install jsonpath-ng,然后用JSONPath表达式直接匹配所有content键的值:
from jsonpath_ng import parse json_data = { "body": [ { "content": "abcd" }, { "content": "test" }, { "paragraph": { "content": "ok" } } ] } # 匹配所有层级的content键 jsonpath_expr = parse('$..content') result = [match.value for match in jsonpath_expr.find(json_data)] print(result) # 输出: ['abcd', 'test', 'ok']
JavaScript 实现
方法1:递归遍历(原生JS)
function extractContents(data) { let contents = []; if (typeof data === 'object' && data !== null) { if ('content' in data) { contents.push(data.content); } // 遍历对象或数组的每一项 for (const key in data) { contents = contents.concat(extractContents(data[key])); } } return contents; } // 你的JSON数据 const jsonData = { "body": [ { "content": "abcd" }, { "content": "test" }, { "paragraph": { "content": "ok" } } ] }; // 调用函数 const result = extractContents(jsonData); console.log(result); // 输出: ['abcd', 'test', 'ok']
方法2:用jsonpath库
先安装依赖:npm install jsonpath,然后用表达式提取:
const jsonpath = require('jsonpath'); const jsonData = { "body": [ { "content": "abcd" }, { "content": "test" }, { "paragraph": { "content": "ok" } } ] }; const result = jsonpath.query(jsonData, '$..content'); console.log(result); // 输出: ['abcd', 'test', 'ok']
内容的提问来源于stack exchange,提问作者Will Miles
相关产品推荐
相关产品推荐

