我有一个类似这样的嵌套JSON数据,大约有5000条记录。
{
"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字典:
>>> 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
?
输出:
download,10.1.1.16
download,10.2.1.18
发布于 2018-07-06 05:09:30
简单的列表理解:
>>> 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']
你可以加入到你想要的输出中:
>>> 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
发布于 2018-07-06 04:28:33
由于{"data":{"attributes":
是一个列表,您可以循环遍历它并打印所需键的值(d
是用户字典):
for item in d['data']['attributes']:
print(item['alert_type'],',',item['user'], sep='')
发布于 2018-07-06 05:01:34
您可以让它有点数据驱动,如下所示:
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))
要处理没有所有键的属性,您可以使用此行作为最后一行,它将为缺少的值分配一个默认值(如所示的空字符串),而不是导致异常。
print(','.join(attribute.get(key, '') for key in DESIRED_KEYS))
https://stackoverflow.com/questions/51199174
复制相似问题