2017-12-13 22 views
0

JSONデータをループして特定のキーの値を検索しようとしています。JSONデータを反復処理できません

{'1': {'manufacturername': 'SVLJ', 
     'modelid': 'TCL014', 
     'name': 'Fling'}, 
'10': {'manufacturername': 'SONY', 
    'modelid': 'BLL4554', 
    'name': 'ACQ'}} 

私の現在の目標は、各項目の番号(1、10、等。)をループにあり、光(「情事」の値を取得する:私のデータは、HTTPリクエストから来ているとのようにデータが見えます、 'acq'など)。私の最新の試みは、次のとおりです。

import requests 

RESOURCE_URL = 'xxx/xxx/' 

def get_json(url): 
    raw_response = requests.get(url) 
    data = raw_response.json() 
    return data 

def get_SMR(): 
    url = "{}SMR/".format(RESOURCE_URL) 
    return get_json(url) 

smr_json = get_SMR() 

for SMR in smr_json: 
    print(SMR['name']) 

私はこれを実行しようとすると、私はエラーを取得:

TypeError: string indices must be integers 

私もJSONライブラリをインポートしようとした、および(raw_response.text)json.loadsを使用してきました;ただし、iterable jsonオブジェクト(キーで参照可能)ではなく、文字列として認識されています。すべての洞察力が大いに評価されます。

答えて

1

for SMR in smr_json:を実行しているときは、は、のキーを反復処理しています。

for key, SMR in smr_json.items(): 
    print(SMR['name']) 

それとも、単に値:あなたがキーと値の両方を反復処理することを意図してきました

In [1]: SMR = 'test' 

In [2]: SMR['string'] 
--------------------------------------------------------------------------- 
TypeError         Traceback (most recent call last) 
... 
TypeError: string indices must be integers 

:他の言葉では、SMRは文字列でインデックス作成を許可していない文字列、次のとおりです。

for SMR in smr_json.values(): 
    print(SMR['name']) 
+0

パーフェクトを私のためにそれをクリアするためにどうもありがとうございます。私は徹底的な説明を感謝します。 –

0

有効なJSONではないため、おそらく文字列が表示されている可能性があります。 JSONには'ではなく、文字列には"が必要です。

json.orgを参照してください:

A string is a sequence of zero or more Unicode characters, wrapped in double quotes, using backslash escapes.

0

私は問題はJSONファイルであると思います。一重引用符は使用できません。

私が最初にこのような何か持っている、二重引用符 "と"単一引用符を置き換えたい:!

{ 
 
\t "1": { 
 
\t \t "manufacturername": "SVLJ", 
 
\t \t "modelid": "TCL014", 
 
\t \t "name": "Fling" 
 
\t }, 
 
\t "10": { 
 
\t \t "manufacturername": "SONY", 
 
\t \t "modelid": "BLL4554", 
 
\t \t "name": "ACQ" 
 
\t } 
 
}