如何使用Python解析指定JSON数据并提取其中的requires字段内容
如何用Python提取JSON中所有的
requires字段内容 嘿,我来帮你搞定这个问题!你的JSON结构里requires字段分布在不同层级——既有顶层的布尔值,也有依赖包内部的嵌套对象,所以我们可以用递归遍历的方式,把所有requires的内容都找出来。
解决方案代码
下面是完整的实现,直接运行就能得到你想要的结果:
import json # 你的JSON示例数据(也可以替换成从文件读取) json_content = ''' { "name": "test", "version": "0.2.0", "lock": 1, "requires": true, "dependencies": { "@yamm/double": { "version": "7.14.5", "requires": { "@ginu/highlight": "^7.4.5" } }, "@dauh/data": { "version": "7.15.0" }, "@babel/core": { "version": "7.12.3", "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.12.3.tgz", "integrity": "sha512-0qXcZYKZp3/6N2jKYVxZv0aNCsxTSVCiK72DTiTYZAu7sjg73W0/aynWjMbiGd87EQL4WyA8reiJVh92AVla9g==", "requires": { "@babel/traverse": "^7.12.1", "@babel/types": "^7.12.1", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.1", "json5": "^2.1.2", "lodash": "^4.17.19", "resolve": "^1.3.2", "semver": "^5.4.1", "source-map": "^0.5.0" } } } } ''' # 解析JSON数据 parsed_data = json.loads(json_content) def extract_all_requires(obj): """递归遍历JSON对象,收集所有requires字段的值""" requires_results = [] # 处理字典类型 if isinstance(obj, dict): # 如果当前字典有requires键,加入结果列表 if 'requires' in obj: requires_results.append(obj['requires']) # 递归遍历字典的每一个值 for value in obj.values(): requires_results.extend(extract_all_requires(value)) # 处理列表类型(防止JSON里有数组嵌套的情况) elif isinstance(obj, list): for item in obj: requires_results.extend(extract_all_requires(item)) return requires_results # 获取所有requires内容 all_requires = extract_all_requires(parsed_data) # 格式化打印结果 print("=== 所有requires字段内容 ===") for index, req in enumerate(all_requires, start=1): print(f"\n第{index}个requires:") print(req)
代码说明
- 递归遍历:函数
extract_all_requires会检查每一个JSON元素,如果是字典就查找requires键,同时递归处理字典里的所有值;如果是列表就逐个处理列表元素,确保不会遗漏任何嵌套层级的requires。 - 灵活适配:不管
requires的值是布尔值、对象还是其他类型,都会被完整收集。 - 文件读取替换:如果你的JSON在文件里,把
json.loads(json_content)替换成:with open('your_json_file.json', 'r', encoding='utf-8') as f: parsed_data = json.load(f)
运行结果
执行代码后,你会得到这样的输出:
=== 所有requires字段内容 === 第1个requires: True 第2个requires: {'@ginu/highlight': '^7.4.5'} 第3个requires: {'@babel/traverse': '^7.12.1', '@babel/types': '^7.12.1', 'convert-source-map': '^1.7.0', 'debug': '^4.1.0', 'gensync': '^1.0.0-beta.1', 'json5': '^2.1.2', 'lodash': '^4.17.19', 'resolve': '^1.3.2', 'semver': '^5.4.1', 'source-map': '^0.5.0'}
内容的提问来源于stack exchange,提问作者danniel foy




