在python3中解析json部分以分隔列表中项目的最佳方法

时间:2015-10-13 14:52:50

标签: python json python-3.x

首先,我在搜索这个问题时遇到了麻烦,因为我不知道所有的术语(所以真的,给我在谷歌搜索中使用的正确术语在这方面同样有用问题)。

我需要在python中解析一些JSON,在解析之后将每个JSON字符串放入一个列表中(List,而不是Python的数组是否正确?)然后我将通过该列表推送JSON内容回到我的来源。

到目前为止,我可以解析出我想要的一部分JSON,但我不知道如何在括号之间打印部分。例如,我想让这个代码块中的每个部分(括号)都在一个单独的JSON行中:

{
"components": [
    {
        "self": "MY URL",
        "id": "ID",
        "name": "NAME",
        "description": "THIS IS DESC",
        "isAssigneeTypeValid": false
    },
    {
        "self": "MY URL 2",
        "id": "ID",
        "name": "name",
        "isAssigneeTypeValid": false
    },
    {
        "self": "URL 3",
        "id": "ID",
        "name": "NAME 3",
        "description": "DESC",
        "isAssigneeTypeValid": false
    }
]
}

我的文件中有更多的JSON,但是使用它,我可以将其归结为只返回上面的文本。

datas = json.loads(data)
print(datas['components'])

所以我的问题是如何打印一个块?或访问第一个' self'部?

3 个答案:

答案 0 :(得分:3)

以下是如何迭代这些数据,将"components"列表中的每个字典转换回JSON字符串:

import json

data = '''
{
    "components": [
        {
            "self": "MY URL",
            "id": "ID",
            "name": "NAME",
            "description": "THIS IS DESC",
            "isAssigneeTypeValid": false
        },
        {
            "self": "MY URL 2",
            "id": "ID",
            "name": "name",
            "isAssigneeTypeValid": false
        },
        {
            "self": "URL 3",
            "id": "ID",
            "name": "NAME 3",
            "description": "DESC",
            "isAssigneeTypeValid": false
        }
    ]
}
'''

datas = json.loads(data)
for d in datas['components']:
    print(json.dumps(d))

<强>输出

{"self": "MY URL", "description": "THIS IS DESC", "id": "ID", "isAssigneeTypeValid": false, "name": "NAME"}
{"self": "MY URL 2", "id": "ID", "isAssigneeTypeValid": false, "name": "name"}
{"self": "URL 3", "description": "DESC", "id": "ID", "isAssigneeTypeValid": false, "name": "NAME 3"}

答案 1 :(得分:1)

当您阅读它时,JSON是一个Python字典,因此您可以使用对字典有效的所有函数。

在你的情况下&#34;组件&#34;是字典的关键,其值是一个列表。列表中的每个项目都是另一个字典。

答案 2 :(得分:1)

如果您有一个有效的json文档,那么您可以简单地遍历components列表。假设您将文件命名为<id>.json,那么您可以执行以下操作:

datas = json.loads(data)
for component in datas['components']:
    with open("{}.json".format(component['id']), 'w') as f:
        json.dump(component, f)