在解析此JSON输出时我错过了什么

时间:2016-07-01 18:01:52

标签: python json

尝试使用Python解析此JSON输出时我错过了什么? JSON看起来像这样:

    {
  "start": 0,
  "terms": [
    "process_name:egagent.exe"
  ],
  "highlights": [],
  "total_results": 448,
  "filtered": {},
  "facets": {},
  "results": [
    {
      "username": "SYSTEM",
      "alert_type": "test"
    },
    {
      "username": "SYSTEM2",
      "alert_type": "test"
    }
   ]
  }

我试图用来访问它的Python很简单。我想获取用户名,但我尝试的一切都会引发错误。当它没有抛出错误时,我似乎得到了每个人的信。所以,如果我这样做:

apirequest = requests.get(requesturl, headers=headers, verify=False)
readable = json.loads(apirequest.content)

#print readable
for i in readable:
    print (i[0])

我得到s,t,h,t,f,f,r,这是每个项目的第一个字母。如果我试试[1],我会得到每个项目的第二个字母。当我按名称尝试时,比如说,我[[start]],我得到一个错误,说字符串索引必须是整数。我很困惑,我是Python新手,但我还没有找到任何东西。请帮忙!我只想访问用户名字段,这就是我尝试执行for循环的原因。提前谢谢!

4 个答案:

答案 0 :(得分:2)

试试这个:

for i in readable["results"]:
    print i["username"]

答案 1 :(得分:2)

加载你的json字符串:

import json

s = """
{
  "start": 0,
  "terms": [
    "process_name:egagent.exe"
  ],
  "highlights": [],
  "total_results": 448,
  "filtered": {},
  "facets": {},
  "results": [
    {
      "username": "SYSTEM",
      "alert_type": "test"
    },
    {
      "username": "SYSTEM2",
      "alert_type": "test"
    }
   ]
}
"""

并为每个结果打印用户名:

print [res['username'] for res in json.loads(s)['results']]

输出:

[u'SYSTEM', u'SYSTEM2']

答案 2 :(得分:1)

for i in readable将通过i词典中的每个键重复readable。如果您随后打印i[0],则表示您正在打印每个键的第一个字符。

假设您希望列表中与"username"键关联的条目中与"results"键关联的值,您可以这样得到它们:

for result in readable["results"]:
     print (result["username"])

答案 3 :(得分:0)

如果readable是您的JSON对象(dict),则可以使用其键访问每个地图中的元素。

readable["results"][0]["username"]

应该为您提供"SYSTEM"字符串。

要打印每个用户名,请执行以下操作:

for result in readable["results"]:
    print(result["username"])

如果您的JSON是str对象,则必须deserialize it with json.loads(readable) first