python - 根据条件替换Json字符串中的信息

标签 python json python-3.x

我有一个非常大的 json 文件,其中有几个嵌套键。从我到目前为止读到的内容来看,如果您这样做:

x = json.loads(data)

Python 会将其解释为字典(如果我错了,请纠正我)。 json 文件中的第四层嵌套包含几个由 ID 号命名的元素,并且所有这些元素都包含一个称为“children”的元素,如下所示:

{"level1":
    {"level2":
        {"level3":
            {"ID1":
                {"children": [1,2,3,4,5]}
            }
            {"ID2":
                {"children": []}
            }
            {"ID3":
                {"children": [6,7,8,9,10]}
            }
      }
   }
}

我需要做的是将所有 "children" 元素中的所有项目替换为空,意思是 "children": [] 如果 ID 号在一个名为 new_ids 的列表,然后将其转换回 json。我已经阅读这个主题几个小时了,但我还没有找到任何类似的内容来尝试帮助自己。

我正在运行 Python 3.3.3。任何想法都将不胜感激!!

谢谢!!

编辑

列表:

new_ids=["ID1","ID3"]

预期结果:

{"level1":
    {"level2":
        {"level3":
            {"ID1":
                {"children": []}
            }
            {"ID2":
                {"children": []}
            }
            {"ID3":
                {"children": []}
            }
      }
   }
}

最佳答案

首先,您的 JSON 无效。我假设你想要这个:

{"level1":
    {"level2":
        {"level3":
            {
            "ID1":{"children": [1,2,3,4,5]},
            "ID2":{"children": []},
            "ID3":{"children": [6,7,8,9,10]}
            }
        }
    }
}

现在,将数据作为字典加载:

>>> with open('file', 'r') as f:
...     x = json.load(f)
... 
>>> x
{u'level1': {u'level2': {u'level3': {u'ID2': {u'children': []}, u'ID3': {u'children': [6, 7, 8, 9, 10]}, u'ID1': {u'children': [1, 2, 3, 4, 5]}}}}}

现在您可以循环遍历 x['level1']['level2']['level3'] 中的键并检查它们是否在您的 new_ids 中。

>>> new_ids=["ID1","ID3"]
>>> for key in x['level1']['level2']['level3']:
...     if key in new_ids:
...         x['level1']['level2']['level3'][key]['children'] = []
... 
>>> x
{u'level1': {u'level2': {u'level3': {u'ID2': {u'children': []}, u'ID3': {u'children': []}, u'ID1': {u'children': []}}}}}

您现在可以将 x 写回文件,如下所示:

with open('myfile', 'w') as f:
    f.write(json.dumps(x))

如果您的 new_ids 列表很大,请考虑将其设为

关于python - 根据条件替换Json字符串中的信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24665403/

相关文章:

python - 关于python中一个 "infinite"集合类的问题(作业)

python - 类中的字典和 Lambda?

python - 当Python中的值为 "00/00/0000"时,如何省略CSV文件中的单元格

javascript - VM1374 :32 Uncaught TypeError: Converting circular structure to JSON(…)

json - 如何从 MacOS 上的 Excel 中的 HTTP 端点检索 JSON 并解析它?

python - 值错误: No data provided for "dense_input"

python - python 计算每一行的值

python - PyTest 中单个测试的覆盖标记

python - pandas read_csv 将所有值放在一列和一行中

java - 使用 JSON 将 XML 转换为 Java 中的类对象以及如何获取数据行