从奇怪嵌套的Python中提取值

时间:2017-12-09 21:30:21

标签: python json parsing dictionary

我一定很慢,因为我花了一整天的谷歌搜索并试图编写Python代码只是简单地列出“代码”值,所以我的输出将是Service1,Service2,Service2。我之前从复杂的json或dict结构中提取了json值。但是现在我必须遇到心理障碍。

这是我的json结构。

myjson='''  

{  
     "formatVersion" : "ABC",  
     "publicationDate" : "2017-10-06",  
"offers" : {  
"Service1" : {  
  "code" : "Service1",  
  "version" : "1a1a1a1a",  
  "index" : "1c1c1c1c1c1c1"  
},  
"Service2" : {  
  "code" : "Service2",  
  "version" : "2a2a2a2a2",  
  "index" : "2c2c2c2c2c2"  
},  
"Service3" : {  
  "code" : "Service4",  
  "version" : "3a3a3a3a3a",  
  "index" : "3c3c3c3c3c3"  
    }  
  }  
 }  
'''  
#convert above string to json
somejson = json.loads(myjson)
print(somejson["offers"]) # I tried so many variations to no avail. 

3 个答案:

答案 0 :(得分:2)

或者,如果你想要“代码”的东西:

>>> [s['code'] for s in somejson['offers'].values()]
['Service1', 'Service2', 'Service4']

答案 1 :(得分:0)

somejson["offers"]是一本字典。看来你想打印它的钥匙。

在Python 2中:

print(somejson["offers"].keys())

在Python 3中:

print([x for x in somejson["offers"].keys()])

在Python 3中,您必须使用列表推导,因为在Python 3中keys()是一个'视图'而不是列表。

答案 2 :(得分:0)

如果您不确定json中的服务数量,这应该可以解决问题。

import json
myjson='''  

{  
     "formatVersion" : "ABC",  
     "publicationDate" : "2017-10-06",  
"offers" : {  
"Service1" : {  
  "code" : "Service1",  
  "version" : "1a1a1a1a",  
  "index" : "1c1c1c1c1c1c1"  
},  
"Service2" : {  
  "code" : "Service2",  
  "version" : "2a2a2a2a2",  
  "index" : "2c2c2c2c2c2"  
},  
"Service3" : {  
  "code" : "Service4",  
  "version" : "3a3a3a3a3a",  
  "index" : "3c3c3c3c3c3"  
    }  
  }  
 }  
'''  
#convert above string to json
somejson = json.loads(myjson)


#Without knowing the Services:
offers = somejson["offers"]
keys = offers.keys()

for service in keys:
    print(somejson["offers"][service]["code"])