【问题标题】:Extracting all specific value pairs in deeply nested JSON提取深度嵌套 JSON 中的所有特定值对
【发布时间】:2021-08-09 23:40:38
【问题描述】:

我有一个深度嵌套的 json,格式如下:

{
"ListId":34,
"FeatCat":[
       {"Id":2,
        "Name":"Arch",
        "FeatGrps":[ 
                    {"Id":3,
                      "Name":"Sty",
                      "Feats":[
                                   {
                                    "Id":32, 
                                    "Name":"Rec"}
                                   ]}]},
       {"Id":9,
        "Name":"F&T",
        "FeatGrps":[ ... ] etc.

我将用这种格式比较两个 json。我想确保这两个 json 具有与相同 Name 值对应的 ID。 ID 将是唯一的,因此它是否嵌套在 FeatGrps 中并不重要。

为此,我想提取 所有 {Id, Name} 值。例如:Id = 2 应该与 Name = "Arch" 匹配。 Id = 3 应该与“Sty”匹配。

如何以如下格式获取所有 [Id, Name] 对:[2, "Arch"], [3, "Sty"]..?它不必是这种确切的列表格式,任何类似的都可以。

谢谢。

【问题讨论】:

    标签: python arrays json sorting dictionary


    【解决方案1】:

    不是很优雅,但这应该可以完成工作:

    def id_names(obj):
        if isinstance(obj, list):
            return sum([id_names(el) for el in obj], [])
        elif isinstance(obj, dict):
            sub_collections = (val for key, val in obj.items() 
                               if isinstance(val, dict) or isinstance(val, list))
            vals = sum([id_names(it) for it in sub_collections], [])
            if obj.get('Id') and obj.get('Name'):
                vals += [(obj.get('Id'), obj.get('Name'))]
            return vals
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-07
      • 2022-07-08
      • 2021-07-18
      • 1970-01-01
      • 1970-01-01
      • 2023-03-22
      相关资源
      最近更新 更多