【问题标题】:Extract values from oddly-nested Python从奇怪嵌套的 Python 中提取值
【发布时间】:2017-12-09 21:30:20
【问题描述】:

我一定很慢,因为我花了一整天的时间在谷歌上搜索并尝试编写 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. 

【问题讨论】:

  • 这有什么奇怪的?对我来说,这看起来像是一个完全正常的嵌套字典;唯一不寻常的是offers 也是一个字典,而不是一个列表。
  • 复制/粘贴非常适合我。怎么了,你期待什么?

标签: python json parsing dictionary


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    somejson["offers"] 是一个字典。看来您想打印它的密钥。

    在 Python 2 中:

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

    在 Python 3 中:

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

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

    【讨论】:

    • 这太棒了!谢谢。以及如何列出“版本”值?
    • 如果你想列出最里面的字典中的任何条目(带有"code""version""index"的条目),你可以做例如print([x["version"] for x in somejson["offers"].values()])。 @glenfant 在他的回答中提到了这一点。
    • 你是救生员。谢谢你,肖恩。
    【解决方案3】:

    如果您不确定 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"])
    

    【讨论】:

    • 一切都像吗?您显示的代码或给出预期输出的示例?
    猜你喜欢
    • 2021-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多