python字典嵌套分层查询_在python的嵌套json字典中查找值

从下面的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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值