2014-07-12 19 views
13

मैं अजगर और एपीआई (विशेष रूप से, इस विश्व कप एपीआई, http://www.kimonolabs.com/worldcup/explorer)अजगर और JSON - लेखन त्रुटि सूची सूचकांक होना चाहिए पूर्णांकों

JSON डेटा इस तरह दिखता है उपयोग करने के लिए सीख रहा हूँ str नहीं:

[ 
    { 
    "firstName": "Nicolas Alexis Julio", 
    "lastName": "N'Koulou N'Doubena", 
    "nickname": "N. N'Koulou", 
    "assists": 0, 
    "clubId": "5AF524A1-830C-4D75-8C54-2D0BA1F9BE33", 
    "teamId": "DF25ABB8-37EB-4C2A-8B6C-BDA53BF5A74D", 
    "id": "D9AD1E6D-4253-4B88-BB78-0F43E02AF016", 
    "type": "Player" 
    }, 

{ 
    "firstName": "Alexandre Dimitri", 
    "lastName": "Song-Billong", 
    "nickname": "A. Song", 
    "clubId": "35BCEEAF-37D3-4685-83C4-DDCA504E0653", 
    "teamId": "DF25ABB8-37EB-4C2A-8B6C-BDA53BF5A74D", 
    "id": "A84540B7-37B6-416F-8C4D-8EAD55D113D9", 
    "type": "Player" 
    }, 
    ] 

मैं बस इस एपीआई में सभी पहले नाम मुद्रित करने की कोशिश कर रहा हूं। यहाँ मैं क्या है:

import urllib2 
import json 

url = "http://worldcup.kimonolabs.com/api/players?apikey=xxx" 
json_obj = urllib2.urlopen(url).read 
readable_json = json.dumps(json_obj) 
playerstuff = readable_json['firstName'] 
for i in playerstuff: 
    print i['firstName'] 

लेकिन जब मैंने उसे चलाने के लिए, मैं त्रुटि मिलती है "... लाइन 8, में ... लेखन त्रुटि: सूची सूचकांक, पूर्णांकों होना चाहिए str नहीं"

मेरे पास है समाधान के लिए चारों ओर देखा, लेकिन अधिक "गहराई से" एपीआई प्रश्नों के लिए प्रश्न ढूंढने लगते हैं और मैं वास्तव में इसे अभी तक समझ नहीं पा रहा हूं, इसलिए मुझे जो भी करने की ज़रूरत है, उसके बारे में कोई मदद या स्पष्टीकरण अद्भुत होगा। धन्यवाद!

+1

readable_json['firstName'] 

बदलते बस कुछ सामान्य अजगर ज्ञान हल urllib2 का उपयोग करने के लिए बेहतर विकल्प। –

+0

मैं इसमें देख लूंगा, धन्यवाद! – user3718365

+0

यूआरएल के बजाय मैं कुछ ऐसा नहीं पढ़ता: @ app.route ('/ test', विधियों = ['GET', 'POST']) def foo(): json_obj = request.json readable_json = json। लोड (json_obj) i readable_json में: प्रिंट I ['firstName'] अगर मैं वही करता हूं, तो मुझे TypeError मिलता है: अपेक्षित स्ट्रिंग या बफर –

उत्तर

18

सबसे पहले, आपको json.loads का उपयोग करना चाहिए, json.dumps नहीं। loads जेएसओएन स्रोत टेक्स्ट को पायथन मूल्य में परिवर्तित करता है, जबकि dumps दूसरी तरफ जाता है।

आपके प्रश्न के शीर्ष पर JSON स्निपेट के आधार पर, इसे ठीक करने के बाद, readable_json एक सूची होगी, और इसलिए readable_json['firstName'] व्यर्थ है। सूची के प्रत्येक तत्व के 'firstName' फ़ील्ड को प्राप्त करने का सही तरीका playerstuff = readable_json['firstName'] लाइन को समाप्त करना है और for i in playerstuff: से for i in readable_json: को बदलना है।

+0

आह! आपके स्पष्टीकरण के लिए धन्यवाद, यह चाल है। अब, लालची पाने के लिए, मैं अंतरिक्ष के साथ पहले नाम के बगल में 'अंतिम नाम' कैसे मुद्रित कर सकता हूं? और यदि आपके पास पाइथन और एपीआई के एक ट्यूटोरियल (सरल शुरू) पर कोई सिफारिशें हैं तो मैं सभी कान हूं! आपकी मदद के लिए धन्यवाद! – user3718365

+0

@ user3718365: 'प्रिंट I ['firstName'], मैं ['lastName']' – jwodder

+0

धन्यवाद! एक अंतिम सवाल जो मुझे मेरे रास्ते पर ले जाना चाहिए: यदि मैं सभी संभावित कुंजी (यानी: प्रथम नाम, अंतिम नाम, आयु इत्यादि) सूचीबद्ध करना चाहता हूं, तो उपयोगकर्ता टाइप कर सकते हैं कि वे क्या देखना चाहते हैं, मैं कैसे वापस आऊंगा चाबियों की सूची (क्या यह सही शब्द है)? इसके अलावा, मैं स्टैक ओवरफ्लो में नया हूं इसलिए मुझे खेद है कि मुझे प्रश्नों पर प्रश्न नहीं जोड़ना चाहिए। – user3718365

2

आप नीचे

url = "http://worldcup.kimonolabs.com/api/players?apikey=xxx" 
json_obj = urllib2.urlopen(url).read 
player_json_list = json.loads(json_obj) 
for player in readable_json_list: 
    print player['firstName'] 

को आप वाक्य रचना शब्दकोश का उपयोग करके सूची तत्व का उपयोग करने की कोशिश कर रहे थे अपने कोड को आसान बनाने में कर सकते हैं।

foo = [1, 2, 3, 4] 
foo["1"] 

के बराबर यह आप क्रम में शब्दकोशों नहीं मिल पाता रखने की सूची है जब भ्रामक हो सकते हैं। अनुरोध पुस्तकालय http://docs.python-requests.org/en/latest/ आम तौर पर एक बहुत है -

+0

इसके लिए धन्यवाद, यह मदद करता है। बहुत सराहना की। – user3718365

+0

फिर आपको इस उत्तर को स्वीकार किए जाने के रूप में चिह्नित करना चाहिए .. –

14

मैं द्वारा

readable_json[0]['firstName'] 
+0

hi = json.dumps (['foo', {'bar': ('baz', none, 1.0, 2)}] ji = json.loads (हाय), जी [0] [ "foo"] Traceback (सबसे हाल कॉल पिछले): फ़ाइल "", लाइन 1, लेखन त्रुटि में: स्ट्रिंग सूचकांक पूर्णांकों होना चाहिए –

संबंधित मुद्दे