如何在python中解析此json数据

2024-09-28 05:18:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我有如下JSON示例,如下所示:

{
  "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"
      },

我只想使用Python打印requires内的数据

我正在尝试不同的方法,但不起作用。请帮忙。我该怎么做


Tags: namecoretestjsontruelock示例map
3条回答

您可以使用python的json库来解析json

import json

my_json = //your json statement

parsed_json = my_json.loads()

print(parsed_json["requires"])

另一种方法是:

data = {
  "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"
      },
    }
}
}

# Actual code starts here
for module, dependencies in data['dependencies'].items():
    if requires := dependencies.get('requires'):
        print (f'Module {module} requires: ')
        for req, version in requires.items():
            print (f'\t{req}: {version}')

输出:

Module @yamm/double requires: 
    @ginu/highlight: ^7.4.5
Module @babel/core 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

看起来你需要一个递归的方法来解决这个问题。试试这个:-

import json

D = '''
{
    "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"
            }
        }
    }
}
'''

j = json.loads(D)

def requires(d):
    for k, v in d.items():
        if k == 'requires':
            if isinstance(v, dict):
                for _k, _v in v.items():
                    print(f'{_k}: {_v}')
            else:
                print(f'{k}: {v}')
        else:
            if isinstance(v, dict):
                requires(v)


requires(j)

相关问题 更多 >

    热门问题