2016-11-20 10 views
0

JSON dictの特定の情報フィールドにアクセスしようとしています。私はjson.loadsを使用しようとすると、しかしDjangoでJSON dictを使用する

{ 
    'search':None, 
    'count':1, 
    'filter':{ 

    }, 
    'issues':[ 
     { 
     'priority':'major', 
     'comment_count':0, 
     'utc_created_on':'2016-11-12 01:48:16+00:00', 
     'utc_last_updated':'2016-11-12 01:48:16+00:00', 
     'status':'new', 
     'title':'example issue', 
     'reported_by':{ 
      'is_staff':False, 
      'display_name':'display name', 
      'is_team':False, 
      'resource_uri':'/1.0/users/username', 
      'avatar':'https://bitbucket.org/account/username/avatar/32/?ts=1479493904', 
      'first_name':'firstname', 
      'username':'username', 
      'last_name':'lastname' 
     }, 
     'is_spam':False, 
     'content':'blah blah', 
     'metadata':{ 
      'milestone':None, 
      'component':None, 
      'version':None, 
      'kind':'bug' 
     }, 
     'local_id':1, 
     'created_on':'2016-11-12T02:48:16.052', 
     'resource_uri':'/1.0/repositories/username/supportal2016test/issues/1', 
     'follower_count':1 
     } 
    ] 
} 

Views.py

def viewIssues(request): 
    r = requests.get(bucket_url) 
    issue_payload = r.json() 
    issue = json.loads(str(issue_payload)) 

    context = { 
     "issue_title": issue['issues']['title'], 
     "issue_content": issue['issues']['content'], 
     "title": "View Issues", 
    } 
    return render(request, "view_issues.html", context) 

STR(issue_payload)私はこれを与える:私のコードは次のように設定されています['issues'] ['title'] ['issues'] ['title']エラーが表示されます。

JSONDecodeError: Expecting property name enclosed in double quotes: line 1 column 2 (char 1) 

変換されたペイロードには各フィールドに引用があるので'issues')。どんな助けでも大歓迎です。

+1

有効なJSONではありません。文字列の二重引用符でなければなりません。 Pythonのような引用符型は使用できません。あなたが実際に持っているのは、JSONではなくオブジェクトのPython表現です。 '' json() ''メソッドが既にあなたのためにそれを行ったので、あなた自身でそれを解読する必要はありません。既にPythonオブジェクトであったものに '' str() ''を使うので、Python表現になります。 –

+0

'issue = json.loads(str(issue_payload))'という行を削除し、 'issue_payload'を使います。それはすでに辞書です。 –

答えて

4

.json()呼び出しは既にJSON結果を解析し、この場合はPython構造体を返します。その後、あなたの電話

issue = json.loads(str(issue_payload)) 

辞書を文字列に強制して、もう一度解析しようとします。しかし、辞書の文字列表現には文字列の周りに'が含まれていて、JSONでは必要に応じて"ではありません。

ショートストーリーを短く切るには:issue_payloadはすでにお望みのものです。

関連する問題