从下面的json中,在python中,我想提取值“TEXT”。除了未知之外,所有键都是常量。未知可以是任何字符串,如“a6784t66”或“hobvp * nfe”。 未知的值不知道,只是它将在每个json响应中的那个位置。
{
"A": {
"B": {
"unknown": {
"1": "F",
"maindata": [
{
"Info": "TEXT"
}
]
}
}
}
}
一行json
'{"A":{"B":{"unknown":{"1":"F","maindata":[{"Info":"TEXT"}]}}}}'
你如何获得“文字”的价值? (我知道如何用json.loads加载json)..但我不知道如何获得“Text”的值。感谢。
(我不确定最佳标题是什么。)
答案 0 :(得分:17)
这有点长,但在上面的例子中:
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]
访问的单项列表,然后您可以按上述步骤操作。请注意,这取决于该词典中只有一个项目 - 如果有更多的话,您需要调整一下。
答案 1 :(得分: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
这应该可以完成这项工作,因为只有未知密钥才真正“未知”
答案 2 :(得分:2)
您可以使用递归函数挖掘每个图层并使用缩进
打印其值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)