簡體   English   中英

如何從嵌套的json值中提取parrticular值。

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM