13

次のjsonから、pythonで値「TEXT」を抽出したいと思います。すべてのキーは、unknown を除いて一定です。Unknown は、"a6784t66" や "hobvp*nfe" などの任意の文字列です。unknown の値は既知ではなく、各 json 応答のその位置にあるということだけです。

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

1行のjson

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

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

(どのタイトルがベストかはわかりません。)

4

3 に答える 3

18

少し長いですが、上記の例では:

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]アクセスして値を取得します。InfoTEXT

変更する場合はunknown、コードのその時点で使用される「既知の」名前を表す変数に置き換えます。

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

そして、私が実際にあなたの質問を初めて適切に読んだ場合、あるunknown時点で何がわからない場合は、次のようにすることができます:

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

values()以下を含む変数はどこですか:

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

でアクセスできる単一項目のリストで[0]、上記のように続行できます。これは、そのディクショナリに存在するアイテムが 1 つだけであることに注意してください。複数のアイテムがある場合は、少し調整する必要があります。

于 2013-01-09T02:57:09.433 に答える
6

再帰関数を使用してすべてのレイヤーを掘り下げ、その値をインデントで出力できます

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)
于 2014-11-06T14:34:30.810 に答える
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

不明なキーのみが実際に「不明」であるため、これでうまくいくはずです。

于 2013-01-09T03:26:58.357 に答える