2012-10-08 13 views
12

सबसे पहले, मैं स्वतंत्र रूप से एक बेकार उदार कला लड़के से थोड़ा अधिक होने के लिए स्वीकार करूँगा जो पूरी तरह से इस स्क्रिप्टिंग चीज़ में स्वयं को सिखाया जाता है। यही कारण है कि कहा, मैं नीचे दिए गए कोड का उपयोग कर एक यूएसजीएस जल डाटा सेवा से मूल्यों को प्राप्त करने का प्रयास कर रहा हूँ:जेएसओएन प्रतिक्रिया से सिंगल वैल्यू निकालें पायथन

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 प्रतिक्रिया से वांछित मान एक्सट्रैक्ट करने के बारे में ट्यूटोरियल पाया है, सबसे काफी सरल कर रहे हैं । मैं जो कठिनाई कर रहा हूं वह इस सेवा को लौटने वाली जटिल प्रतिक्रिया की तरह दिख रहा है। प्रतिक्रिया के माध्यम से देखकर, मैं देख सकता हूं कि मैं क्या चाहता हूं वह दो अलग-अलग वर्गों और एक समय मूल्य से मूल्य है। इसलिए, मैं प्रतिक्रिया देख सकता हूं और देख सकता हूं कि मुझे क्या चाहिए, मैं सिर्फ अपने जीवन के लिए नहीं, यह समझ सकता हूं कि इन मूल्यों को कैसे निकाला जाए।

यह पता लगाने में किसी भी और सभी सहायता के लिए धन्यवाद!

+7

आप json का एक नमूना दे सकते हैं और आप क्या मूल्य की जरूरत का प्रयास करें? या 'गेज आईडी' के लिए एक मूल्य जिसका हम उपयोग कर सकते हैं। –

+0

किसी ने JSON प्रतिक्रिया देखने के लिए कहा। मैं इसे मूल रूप से शामिल करने के लिए क्षमा चाहता हूं। पूरी चीज पोस्ट करने के बजाय (यह बड़ा है), बस इस लिंक का पालन करें: http://waterservices.usgs.gov/nwis/iv/?format=json&sites=01646500¶meterCd=00060,00065। मैं जो कह सकता हूं, उससे मैं मूल्य> समय श्रृंखला> चर> मूल्य> मान की तलाश कर रहा हूं – knu2xs

उत्तर

25

json.loads का उपयोग करके आपका डेटा एक पायथन dictionary में बदल देगा।

शब्दकोश मूल्यों ['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 
} 

का उपयोग कर एक अजगर का ढ़ंग

resp_dict = json.loads(resp_str) 

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

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

केवल सुझाव एक और अधिक सुंदर दृष्टिकोण है कि नीचा होगा के लिए .Get के माध्यम से() अपने resp_dict उपयोग करने के लिए है में अनुवाद होगा एक्सेस किया जाता है ठीक है अगर डेटा अपेक्षित नहीं है।

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

यदि आप चाहें तो कुंजी के परीक्षण के लिए आप कुछ तर्क भी जोड़ सकते हैं। JSON उत्तर अजगर

से

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

निकालें एकल मान इस

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']) 
संबंधित मुद्दे