我试图将一些JSON输出写入csv文件,但首先我试图了解数据的结构。我正在使用连接到API的示例脚本,并根据指定的查询下拉数据。
使用此查询从服务器返回json:
response = api_client.get_search_results(search_id, 'application/json')
body = response.read().decode('utf-8')
body_json = json.loads(body)
如果我执行
print(body_json.keys())
我得到以下输出:
dict_keys(['events'])
因此,假设我真正感兴趣的条目是事件字典中的另一个字典是正确的吗? 如果是这样,我怎样才能访问'它们?
示例JSON数据,搜索查询返回上面的变量
{
"events":[
{
"source_ip":"10.143.223.172",
"dest_ip":"104.20.251.41",
"domain":"www.theregister.co.uk",
"Domain Path":"NULL",
"Domain Query":"NULL",
"Http Method":"GET",
"Protocol":"HTTP",
"Category":"NULL",
"FullURL":"http://www.theregister.co.uk"
},
{
"source_ip":"10.143.223.172",
"dest_ip":"104.20.251.41",
"domain":"www.theregister.co.uk",
"Domain Path":"/2017/05/25/windows_is_now_built_on_git/",
"Domain Query":"NULL",
"Http Method":"GET",
"Protocol":"HTTP",
"Category":"NULL",
"FullURL":"http://www.theregister.co.uk/2017/05/25/windows_is_now_built_on_git/"
},
]
}
非常感谢任何帮助。
答案 0 :(得分:1)
回答你的问题:是的。您的body_json
已经返回了一个包含“事件”键的词典,其中包含一个词典列表。
“访问”它们的最佳方式是迭代它们。
一个非常基本的例子:
for i in body_json['events']:
print(i)
当然,在迭代过程中,您可以通过将print(i)
替换为print(i['FullURL'])
并将其保存到变量等来访问所需的特定数据。
重要的是要注意,无论何时使用返回JSON响应的API,您只需使用字典和Python数据结构。
祝你好运。
答案 1 :(得分:1)
Json.keys()仅返回与json关联的键。 这是代码:
for key in json_data.keys():
for i in range(len(json_data[key])):
key2 = json_data[key][i].keys()
for k in key2:
print k + ":" + json_data[key][i][k]
输出:
Http Method:GET
Category:NULL
domain:www.theregister.co.uk
Protocol:HTTP
Domain Query:NULL
Domain Path:NULL
source_ip:10.143.223.172
FullURL:http://www.theregister.co.uk
dest_ip:104.20.251.41
Http Method:GET
Category:NULL
domain:www.theregister.co.uk
Protocol:HTTP
Domain Query:NULL
Domain Path:/2017/05/25/windows_is_now_built_on_git/
source_ip:10.143.223.172
FullURL:http://www.theregister.co.uk/2017/05/25/windows_is_now_built_on_git/
dest_ip:104.20.251.41