[英]How to extract parrticular value from nested json values.?
我是python的新手。
我有一個小要求(即)只想從JSON格式中提取一個值。
如果我錯了,請糾正我。
JSON輸入是:
{
"meta": {
"limit": 1,
"next": "/api/v1/ips/?username=sic1&api_key=689db0740ed73c2bf6402a7de0fcf2d7b57111ca&limit=1&objects=&offset=1",
"offset": 0,
"previous": null,
"total_count": 56714
},
"objects": [
{
"_id": "556f4c81dcddec0c41463529",
"bucket_list": [],
"campaign": [
{
"analyst": "prabhu",
"confidence": "medium",
"date": "2015-06-03 14:50:41.440000",
"name": "Combine"
}
],
"created": "2015-06-03 14:50:41.436000",
"ip": "85.26.162.70",
"locations": [],
"modified": "2015-06-18 09:50:51.612000",
"objects": [],
"relationships": [
{
"analyst": "prabhu",
"date": "2015-06-18 09:50:51.369000",
"rel_confidence": "unknown",
"rel_reason": "N/A",
"relationship": "Related_To",
"relationship_date": "2015-06-18 09:50:51.369000",
"type": "Indicator",
"value": "556f4c81dcddec0c4146353a"
}
],
"releasability": [],
"schema_version": 3,
"screenshots": [],
"sectors": [],
"source": [
{
"instances": [
{
"analyst": "prabhu",
"date": "2015-06-03 14:50:41.438000",
"method": "trawl",
"reference": "http://www.openbl.org/lists/base_30days.txt"
}
],
"name": "www.openbl.org"
}
],
"status": "New",
"tickets": [],
"type": "Address - ipv4-addr"
}
]
}
我用來獲取對象的IP值的代碼
import requests
from pprint import pprint
import json
url = 'http://127.0.0.1:8080/api/v1/ips/'
params = {'api_key':'xxxxxx','username': 'abcd'}
r = requests.get(url, params=params, verify=False)
parsed = json.loads(r)
print (parsed['objects']['ip'])
我收到的錯誤是:
Traceback (most recent call last):
File "testapi.py", line 9, in <module>
parsed = json.loads(r)
File "/usr/lib/python2.7/json/__init__.py", line 338, in loads
return _default_decoder.decode(s)
File "/usr/lib/python2.7/json/decoder.py", line 366, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
TypeError: expected string or buffer
我只想從JSON輸入中獲取IP。
謝謝。
您正在將請求對象而不是str
對象傳遞給json.loads()
。 你需要改變
parsed = json.loads(r)
至
parsed = json.loads(r.text)
另外, parsed['objects']
是一個列表,你需要訪問它的第一個元素然后獲取密鑰ip
:
>>> print(parsed['objects'][0]['ip'])
問題出在這一行: parsed = json.loads(r)
你正在恢復json響應,但是把json
元素輸入到json.loads
,而不是json.loads
<Response [200]>
>>> r = requests.get('http://www.google.com')
>>> r
<Response [200]>
>>> type(r)
<class 'requests.models.Response'>
(仔細查看錯誤消息。 Expected string or buffer
這意味着你提供的東西不是字符串或緩沖區(在這種情況下是一個對象))
這就是為什么str(r)
不起作用的原因。 因為它只是將<Response 200>
轉換為'<Response 200>'
,這顯然不是json。
將此行更改為parsed = json.loads(r.text)
。
>>> type(r.text)
<type 'unicode'>
然后parsed['objects'][0]['ip']
應該給你IP地址:)
您可以在此處找到有關請求模塊的更多信息
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.