13

从以下 json 中,在 python 中,我想提取值“TEXT”。除了未知之外,所有的键都是不变的。Unknown 可以是任何字符串,例如“a6784t66”或“hobvp*nfe”。unknown 的值是未知的,只是它会在每个 json 响应中的那个位置。

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

一行json

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

你将如何获得“文本”的价值?(我知道如何使用 json.loads 加载 json)..但我不确定如何获取“Text”的值。谢谢。

(我不确定最好的标题是什么。)

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],然后访问Info键以获取值TEXT

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]然后您可以按上述方式进行操作。请注意,这取决于该词典中只有一个项目 - 如果有更多项目,您需要进行一些调整。

于 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 回答