从下面的json中,在python中,我想提取值" TEXT"。 除未知外,所有键都是常数。 未知的可能是任何字符串,例如" a6784t66"或" hobvp * nfe"。 未知值未知,只是未知值将位于每个json响应中的那个位置。
1
2
3
4
5
6
7
8
9
10
11
12
13
14{
"A": {
"B": {
"unknown": {
"1":"F",
"maindata": [
{
"Info":"TEXT"
}
]
}
}
}
}
一行json
1'{"A":{"B":{"unknown":{"1":"F","maindata":[{"Info":"TEXT"}]}}}}'
您将如何获得"文本"的价值? (我知道如何使用json.loads加载json)。但是我不确定如何获取"文本"的值。 谢谢。
(我不确定最好的标题是什么。)
这有点冗长,但是在上面的示例中:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22In [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更改的情况下,您可以将其替换为一个变量,该变量表示在代码中该点将采用的"已知"名称:
1
2my_variable = 'some_name'
data['A']['B'][my_variable]['maindata'][0]['Info']
而且,如果我本来会第一次真正正确地阅读您的问题,如果您在任何时候都不知道unknown是什么,则可以执行以下操作:
1data['A']['B'].values()[0]['maindata'][0]['Info']
其中values()是包含以下内容的变量:
1[{u'1': u'F', u'maindata': [{u'Info': u'TEXT'}]}]
可以使用[0]访问的单项列表,然后可以按照上述步骤进行操作。请注意,这取决于该词典中仅存在一项-如果还有更多项,则需要进行一些调整。
我不知道unknown的价值是什么,所以那将行不通。 未知可以是任何字符串。
因此,无论名称是什么,您只需要访问那时的内容即可?
是的,这就是为什么它叫unknown = P,否则很容易得到。
虐待尝试一下。
您可以使用递归函数来遍历每个图层并使用缩进来打印其值
1
2
3
4
5
6
7
8
9
10
11
12
13def 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)
正如您所说的,未知是固定的
您可以执行以下操作
1
2
3
4
5import 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
这应该可以完成工作,因为只有未知密钥才是真正的"未知"
我现在意识到RocketDonkey在他的帖子中稍后提到了这一点! :)
哈哈,+ 1到正确的地步!
@RocketDonkey-的确是新用户需要的! :D