如果键值匹配,则解析JSON数据,并在Python中打印键值

时间:2018-09-19 12:23:12

标签: python json parsing

我对JSON解析非常陌生。以下是我的JSON:

[
    {
        "description": "Newton", 
        "exam_code": {
            "date_added": "2015-05-13T04:49:54+00:00", 
            "description": "Production", 
            "exam_tags": [
                {
                    "date_added": "2012-01-13T03:39:17+00:00", 
                    "descriptive_name": "Production v0.1", 
                    "id": 1, 
                    "max_count": "147", 
                    "name": "Production"
                }
            ], 
            "id": 1, 
            "name": "Production", 
            "prefix": "SA"
        }, 
        "name": "CM"
    }, 
    {
        "description": "Opera", 
        "exam_code": {
            "date_added": "2015-05-13T04:49:54+00:00", 
            "description": "Production", 
            "test_tags": [
                {
                    "date_added": "2012-02-22T12:44:55+00:00", 
                    "descriptive_name": "Production v0.1", 
                    "id": 1, 
                    "max_count": "147", 
                    "name": "Production" 
                }
            ], 
            "id": 1, 
            "name": "Production", 
            "prefix": "SA"
        },       
        "name": "OS"
    }
]

在这里,我试图查找名称值是否为 CM 打印说明值。

如果名称值为 OS ,则打印说明值。

请帮助我了解如何完成JSON解析?

1 个答案:

答案 0 :(得分:-1)

考虑到您已经从某个位置读取了JSON字符串,可以是文件,stdin或任何其他来源。

您实际上可以通过执行以下操作将其反序列化为Python对象:

import json

# ...

json_data = json.loads(json_str)

json_str是您要解析的JSON字符串。

在您的情况下,json_str将反序列化为Python list,因此您可以像通常使用list一样对它进行任何操作。

当然,这包括遍历元素:

for item in json_data:
    if item.get('name') in ('CM', 'OS'):
        print(item['description'])

如您所见,json_data中的项目已反序列化为dict,因此您可以使用dict操作访问实际字段。


注意

如果您有权访问文件处理程序/描述符或流,也可以直接从源中反序列化JSON:

# Loading from a file

import json
with open('my_json.json', 'r') as fd:
    # Note that we're using json.load, not json.loads
    json_data = json.load(fd)

# Loading from stdin

import json, sys
json_data = json.load(sys.stdin)