You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何使用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)

代码说明

  1. 递归遍历:函数extract_all_requires会检查每一个JSON元素,如果是字典就查找requires键,同时递归处理字典里的所有值;如果是列表就逐个处理列表元素,确保不会遗漏任何嵌套层级的requires
  2. 灵活适配:不管requires的值是布尔值、对象还是其他类型,都会被完整收集。
  3. 文件读取替换:如果你的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

火山引擎 最新活动