2012-06-06 27 views
0

我遇到了一個我寫的代碼的問題。當我運行的代碼我得到一個錯誤:如何在Python中使用json提取數據

Traceback (most recent call last): 
File "test23_json_users.py", line 23, in <module> 
for user_dict in abc['user_account']['sip_id']: 
TypeError: list indices must be integers, not str 

代碼:

result = '[{"user_account":[{"address":null,"name":null,"country":null,"password":"****","extension":"1112","sip_id":"[email protected]","sip_name":"23001","user_id":7973712,"locked":false,"created":null,"h323_name":"1101","city":null,"email":null,"phone":null,"zip":null},{"address":null,"name":null,"country":null,"password":"****","extension":"1113","sip_id":"[email protected]","sip_name":"23002","user_id":8847075,"locked":false,"created":null,"h323_name":"1102","city":null,"email":null,"phone":null,"zip":null},{"address":null,"name":null,"country":null,"password":"****","extension":"1114","sip_id":"[email protected]","sip_name":"23003","user_id":3680630,"locked":false,"created":null,"h323_name":"1103","city":null,"email":null,"phone":null,"zip":null},{"address":null,"name":null,"country":null,"password":"****","extension":"1115","sip_id":"[email protected]","sip_name":"23004","user_id":136391,"locked":false,"created":null,"h323_name":"1104","city":null,"email":null,"phone":null,"zip":null},{"address":null,"name":null,"country":null,"password":"****","extension":"1116","sip_id":"[email protected]","sip_name":"23005","user_id":5692227,"locked":false,"created":null,"h323_name":"1105","city":null,"email":null,"phone":null,"zip":null},{"address":null,"name":null,"country":null,"password":"****","extension":"1117","sip_id":"[email protected]","sip_name":"23006","user_id":7559026,"locked":false,"created":null,"h323_name":"1106","city":null,"email":null,"phone":null,"zip":null},{"address":null,"name":null,"country":null,"password":"****","extension":"1118","sip_id":"[email protected]","sip_name":"23007","user_id":3226075,"locked":false,"created":null,"h323_name":"1107","city":null,"email":null,"phone":null,"zip":null},{"address":null,"name":null,"country":null,"password":"****","extension":"1119","sip_id":"[email protected]","sip_name":"23008","user_id":6184875,"locked":false,"created":null,"h323_name":"1108","city":null,"email":null,"phone":null,"zip":null},{"address":null,"name":null,"country":null,"password":"****","extension":"1120","sip_id":"[email protected]","sip_name":"23009","user_id":1711112,"locked":false,"created":null,"h323_name":"1109","city":null,"email":null,"phone":null,"zip":null},{"address":null,"name":null,"country":null,"password":"****","extension":"1121","sip_id":"[email protected]","sip_name":"23010","user_id":5383101,"locked":false,"created":null,"h323_name":"1110","city":null,"email":null,"phone":null,"zip":null}]}' 

params = result[result.find('{"'):] 
#print params 
abc = json.loads(params) 

# Here I'm trying to extract just sip_id from the string result using json. 
# I am not able to figure out what went wrong . 
for user_dict in abc['user_account']['sip_id']: 
    print 'usersname : %s' % (user_dict['sip_id']) 
+0

當我至REGx ..它工作正常語法中使用re.findall('(<= \\ 「sip_id \\」 使用:\\?「)[A-ZA- Z0-9] + @ [a-zA-Z0-9。] +(?= \\「)',結果) – JJ84

+0

專業提示:使用'from pprint import pprint',然後'pprint(abc)'得到更好地感受你的數據結構是什麼樣的。 –

回答

1

abc['user_account']應該是一個列表。

列表a=['hello',1,2,'people']有4個元素通過索引a[0]a[3]訪問。

字典d={'a':1,'b':2}有鍵和值。在這種情況下d['a']的值爲1,d[b']有2

如果您要訪問東西abc['user_account'],類型abc['user_account'][42]。如果你想遍歷它

for a in abc['user_account']: 
    print a 
+0

Cool Works現在好了。我嘗試過:對於abc ['user_account']中的user_dict: print'usersname:%s'%(user_dict ['sip_id']) – JJ84

+0

對不起,我不擅長編輯這段代碼... – JJ84

+0

是否我可以用一行代碼提取出sip id:for user_dict in abc ['user_account'] ['sip_id']:print'usersname:%s'%(user_dict ['sip_id']) – JJ84

2

變化

for user_dict in abc['user_account']['sip_id']: 

for user_dict in abc['user_account']: