首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >解析嵌套的JSON键并获取CSV格式的值

解析嵌套的JSON键并获取CSV格式的值
EN

Stack Overflow用户
提问于 2018-07-06 04:13:56
回答 4查看 180关注 0票数 0

我有一个类似这样的嵌套JSON数据,大约有5000条记录。

代码语言:javascript
复制
{
    "data": {
        "attributes": [
            {
                "alert_type": "download",
                "severity_level": "med",
                "user": "10.1.1.16"
            },
            {
                "alert_type": "download",
                "severity_level": "low",
                "user": "10.2.1.18"
            }
        ]
    }
}

现在,我需要解析这个JSON,并只获取CSV格式的某些字段。我们需要CSV格式的alert_type & user

我尝试解析这个JSON字典:

代码语言:javascript
复制
>>> import json
>>> resp = '{"data":{"attributes":[{"alert_type":"download","severity_level":"med","user":"10.1.1.16"},{"alert_type":"download","severity_level":"low","user":"10.2.1.18"}]}}'
>>> user_dict = json.loads(resp)
>>> event_cnt = user_dict['data']['attributes']
>>> print event_cnt[0]['alert_type']
download
>>> print event_cnt[0]['user']
10.1.1.16
>>> print event_cnt[0]['alert_type'] + "," + event_cnt[0]['user']
download,10.1.1.16
>>>

如何在一次迭代中以CSV格式获取特定keys的所有元素/values

输出:

代码语言:javascript
复制
download,10.1.1.16
download,10.2.1.18
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-07-06 05:09:30

简单的列表理解:

代码语言:javascript
复制
>>> jdict=json.loads(resp)
>>> ["{},{}".format(d["alert_type"],d["user"]) for d in jdict["data"]["attributes"]]
['download,10.1.1.16', 'download,10.2.1.18']

你可以加入到你想要的输出中:

代码语言:javascript
复制
>>> li=["{},{}".format(d["alert_type"],d["user"]) for d in jdict["data"]["attributes"]]
>>> print '\n'.join(li)
download,10.1.1.16
download,10.2.1.18
票数 1
EN

Stack Overflow用户

发布于 2018-07-06 04:28:33

由于{"data":{"attributes":是一个列表,您可以循环遍历它并打印所需键的值(d是用户字典):

代码语言:javascript
复制
for item in d['data']['attributes']:
    print(item['alert_type'],',',item['user'], sep='')
票数 1
EN

Stack Overflow用户

发布于 2018-07-06 05:01:34

您可以让它有点数据驱动,如下所示:

代码语言:javascript
复制
import json

DESIRED_KEYS = 'alert_type', 'user'

resp = '''{ "data": {
                "attributes": [
                    {
                        "alert_type": "download",
                        "severity_level": "med",
                        "user": "10.1.1.16"
                    },
                    {
                        "alert_type": "download",
                        "severity_level": "low",
                        "user": "10.2.1.18"
                    }
                ]
            }
          }
       '''

user_dict = json.loads(resp)

for attribute in user_dict['data']['attributes']:
    print(','.join(attribute[key] for key in DESIRED_KEYS))

要处理没有所有键的属性,您可以使用此行作为最后一行,它将为缺少的值分配一个默认值(如所示的空字符串),而不是导致异常。

代码语言:javascript
复制
    print(','.join(attribute.get(key, '') for key in DESIRED_KEYS))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51199174

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档