2015-10-04 44 views
0

我有JSON這樣的:得到JSON夾具項目在Python

[ 
    { 
    fields: { 
     username: "andriy", 
     first_name: "", 
     last_name: "", 
     is_active: true, 
     is_superuser: true, 
     is_staff: true, 
     last_login: "2015-03-26T13:20:01.902Z", 
     groups: [ ], 
     user_permissions: [ ], 
     password: "pbkdf2_sha256$12000$YluCbMyidWwL$yH", 
     email: "", 
     date_joined: "2015-03-26T13:19:23.269Z" 
    }, 
    model: "auth.user", 
    pk: 4 
    }, 

,並得到項目 '用戶名' 的價值:

import json 
from collections import OrderedDict 
from django.http import HttpResponse 

path = 'management/test.json' 
def load_fixture(name): 
    r = json.load(open(path,'r+'), object_pairs_hook=OrderedDict) 
    dic = json.dumps(r, indent=2) 
    name = dic['fields'][0]['username'] 
    return HttpResponse(name) 

或以這樣的方式:

.... 
    def load_fixture(name): 
    with open(path,'r+') as json_file: 
     json_data = json_file.read() 
     dic = json.loads(json_data) 
     name = dic['fields'][0]['username'] 

     return HttpResponse(name) 

總是出現錯誤:「字符串索引必須是整數,而不是str」或「列表索引必須是整數,而不是str」(在第二個代碼中)。但爲什麼?它確實是字典,而不是字符串。我已經閱讀了許多類似的話題,並且似乎讓人們建議。我的代碼有什麼問題?

+0

'json.dumps'給你一個字符串,而不是字典。而且,你的''''鍵的值是'json',你正在訪問它的'0th'索引。 –

+0

剛剛嘗試過:name = dic [0] ['fields'] ['username'],它返回「andriy」。但這很奇怪 – Andriy

回答

2

dic['fields'][0]['username']應改爲dic[0]['fields']['username']。所以第二個源代碼應該是:

def load_fixture(name): 
with open(path,'r+') as json_file: 
    json_data = json_file.read() 
    dic = json.loads(json_data) 
    name = dic[0]['fields']['username'] 

    return HttpResponse(name) 
+0

謝謝!我已經這樣做了,它對我有用。 – Andriy