Подтвердить что ты не робот

Извлечь одно значение из ответа JSON Python

Во-первых, я буду свободно соглашаться на то, чтобы быть немного больше, чем неуклюжий парень гуманитарных наук, который полностью самоучится в этом сценарии. Тем не менее, я пытаюсь получить значения из USGS Water Data Service, используя следующий код:

def main(gaugeId):

    # import modules
    import urllib2, json

    # create string
    url = "http://waterservices.usgs.gov/nwis/iv/?format=json&sites=" + gaugeId + "&parameterCd=00060,00065"

    # open connection to url
    urlFile = urllib2.urlopen(url)

    # load into local JSON list
    jsonList = json.load(urlFile)

    # extract and return
    # how to get cfs, ft, and zulu time?
    return [cfs, ft, time]

Хотя я нашел несколько руководств относительно того, как извлекать нужные значения из ответа JSON, большинство из них довольно просты. Трудность, с которой я сталкиваюсь, заключается в извлечении из того, что выглядит как очень сложный ответ, возвращаемый этой службой. Просматривая ответ, я вижу, что я хочу, это значение из двух разных разделов и значение времени. Следовательно, я могу посмотреть на ответ и посмотреть, что мне нужно, я просто не могу, для жизни меня, выяснить, как извлечь эти значения.

Спасибо за любую помощь в этом!

4b9b3361

Ответ 1

с помощью json.loads превратит ваши данные в словарь python.

Доступ к словарям осуществляется с помощью ['key']

resp_str = {
  "name" : "ns1:timeSeriesResponseType",
  "declaredType" : "org.cuahsi.waterml.TimeSeriesResponseType",
  "scope" : "javax.xml.bind.JAXBElement$GlobalScope",
  "value" : {
    "queryInfo" : {
      "creationTime" : 1349724919000,
      "queryURL" : "http://waterservices.usgs.gov/nwis/iv/",
      "criteria" : {
        "locationParam" : "[ALL:103232434]",
        "variableParam" : "[00060, 00065]"
      },
      "note" : [ {
        "value" : "[ALL:103232434]",
        "title" : "filter:sites"
      }, {
        "value" : "[mode=LATEST, modifiedSince=null]",
        "title" : "filter:timeRange"
      }, {
        "value" : "sdas01",
        "title" : "server"
      } ]
    }
  },
  "nil" : false,
  "globalScope" : true,
  "typeSubstituted" : false
}

переводится в диктофон python

resp_dict = json.loads(resp_str)

resp_dict['name'] # "ns1:timeSeriesResponseType"

resp_dict['value']['queryInfo']['creationTime'] # 1349724919000

Ответ 2

Только предложение - получить доступ к вашему resp_dict через .get() для более грациозного подхода, который будет ухудшаться хорошо, если данные не так ожидаются.

resp_dict = json.loads(resp_str)
resp_dict.get('name') # will return None if 'name' doesn't exist

Вы также можете добавить некоторую логику для проверки ключа, если хотите.

if 'name' in resp_dict:
    resp.dict['name']
else:
    # do something else here.

Ответ 3

Извлечь одно значение из ответа JSON Python

Попробуйте это

import json
import sys

#load the data into an element
data={"test1" : "1", "test2" : "2", "test3" : "3"}

#dumps the json object into an element
json_str = json.dumps(data)

#load the json to a string
resp = json.loads(json_str)

#print the resp
print (resp)

#extract an element in the response
print (resp['test1'])