2013-01-09 17 views
7

次のjsonから、Pythonで、値 "TEXT"を抽出したいと思います。すべてのキーは、未知数を除いて定数です。 Unknownは、 "a6784t66"や "hobvp * nfe"のような文字列です。 不明の値は、とは知られておらず、それぞれのjsonレスポンスのその位置にあることがわかります。Pythonでネストされたjson辞書内の値を見つける

{ 
    "A": { 
    "B": { 
     "unknown": { 
     "1": "F", 
     "maindata": [ 
      { 
      "Info": "TEXT" 
      } 
     ] 
     } 
    } 
    } 
} 

1行JSON

'{"A":{"B":{"unknown":{"1":"F","maindata":[{"Info":"TEXT"}]}}}}' 

どのようにして "テキスト" の値を取得するのでしょうか? (私はjson.loadsでjsonをロードする方法を知っています)..しかし、私は "テキスト"の値を取得する方法がわかりません。ありがとう。

(私は最高のタイトルが何であるかわからない。)

答えて

15

それは少し長ったらしいですが、上記のものの例では:

In [1]: import json 

In [2]: s = """\ 
    ...: { 
    ...: "A": { 
    ...:  "B": { 
    ...:  "unknown": { 
    ...:   "1": "F", 
    ...:   "maindata": [ 
    ...:   { 
    ...:    "Info": "TEXT" 
    ...:   } 
    ...:   ] 
    ...:  } 
    ...:  } 
    ...: } 
    ...: }""" 

In [3]: data = json.loads(s) 

In [4]: data['A']['B']['unknown']['maindata'][0]['Info'] 
Out[4]: u'TEXT' 

あなたは基本的に辞書として扱い、渡しますキーを使用して各ネストされた辞書の値を取得します。唯一の異なる部分は、maindataをヒットしたときです。結果の値はリストになります。これを処理するために、最初の要素[0]を引いてから、Infoのキーにアクセスして、値TEXTを取得します。 unknown変更の場合

、あなたはそれがあなたのコード内でその時点でかかります「知られている」名前を表す変数で置き換えます:

my_variable = 'some_name' 
data['A']['B'][my_variable]['maindata'][0]['Info'] 

そして、私は実際にあなたが読んでいるかのをvalues()を含む変数がある

data['A']['B'].values()[0]['maindata'][0]['Info'] 

:あなたはunknownはどの点にあるかわからない場合は質問が適切に最初の時間は、あなたはこのような何かを行うことができ

[{u'1': u'F', u'maindata': [{u'Info': u'TEXT'}]}] 

[0]でアクセスできる単一項目のリストで、上記のように処理することができます。これは、その辞書に存在するアイテムが1つしかないことに依存していることに注意してください - もっと多くのものがある場合は少し調整する必要があります。

+0

私は不明の値が何であるか分かりません。そのようには動作しません。 Unknownは任意の文字列です。 – user1959942

+0

名前に関係なく、その時点で何にでもアクセスする必要がありますか? – RocketDonkey

+0

ええ、その理由は、不明と呼ばれる= P、そうでなければそれは簡単に得るだろう。 – user1959942

2

あなたは、未知のは、あなただけの未知の鍵はあなたが使用することができます

+0

私は今、RocketDonkeyが彼のポストでこれを後で言及したことを認識しました!:) – minocha

+0

ハハ、よくポイント+1に向かうために+1! – RocketDonkey

+0

@RocketDonkey - 実際には、新しいユーザーが必要とするもの! :D – minocha

2

本当に「不明」であるので、これは、仕事をする必要があり、次の

import json 
s=json.loads('{"A":{"B":{"unknown":{"1":"F","maindata":[{"Info":"TEXT"}]}}}}') 
i=s["A"]["B"].keys() 
x=i[0] # Will store 'unknown' in x, whatever unknown is 
print s['A']['B'][x]['maindata'][0]['Info'] #here x dictionary index is used after B as its value will be the value for unknown 

を行うことができます一定の場所 であったと言ったようにすべてのレイヤーを掘り下げてインデントで値を表示する再帰関数

def recurse_keys(df, indent = ' '): 
    ''' 
    import json, requests, pandas 
    r = requests.post(...) 
    rj = r.json() # json decode results query 
    j = json.dumps(rj, sort_keys=True,indent=2)    
    df1 = pandas.read_json(j)   
    ''' 
    for key in df.keys(): 
     print(indent+str(key)) 
     if isinstance(df[key], dict): 
      recurse_keys(df[key], indent+' ') 
recurse_keys(df1) 
関連する問題