用于从Json文件的值中移除所有数据的Python脚本

dtcbnfnu  于 2022-12-10  发布在  Python
关注(0)|答案(1)|浏览(130)

我在论坛上搜索了这个查询,看起来很简单,我该如何使用python将JSON文件中的所有数据从值中删除为NULL或“"?
之前的JSON示例:

{
     “StringProperty”: “StringValue”,
    “NumberProperty”: 10,
    “FloatProperty”: 20.13,
    “BooleanProperty”: true,
    “EmptyProperty”: null
}

python脚本运行后的JSON示例。

{
     “StringProperty”:
    “NumberProperty”:
    “FloatProperty”: 
    “BooleanProperty”: 
    “EmptyProperty”:
}

到目前为止,我已经尝试过:

def del_none(N):
    """
    Delete keys with the value ``None`` in a dictionary, recursively.

    """
    # For Python 3, write `list(d.items())`; `N.items()` won’t work
    for key, value in list(N.items()):
        if value is None:
            del N[key]
        elif isinstance(value, dict):
            del_none(value)
    return N  # For convenience

但这不是我想要的。
我们欢迎您在编写此python脚本方面提供任何帮助;不知从何说起。

  • 谢谢-谢谢
yi0zb3m4

yi0zb3m41#

要删除json值,可以更新已有的递归函数。
也许有一些现有的优化功能虽然...

import json

s = '{"StringProperty": "StringValue", ' \
    '"NumberProperty": 10, ' \
    '"FloatProperty": 20.13, ' \
    '"BooleanProperty": true, ' \
    '"EmptyProperty": null,' \
    '"NestedProperty": {' \
        '"NestedStringProperty": "StringValue", ' \
        '"NestedNumberProperty": 10}' \
    '}'
# first convert it to dict
dct = json.loads(s)

def clear_dict_values(d: dict) -> dict:
    for key, value in d.items():
        if isinstance(value, dict):
            d[key] = clear_dict_values(value)
        else:
            d[key] = None  # or ""
    return d

print(clear_dict_values(dct))

产生:

{'StringProperty': None, 'NumberProperty': None, 'FloatProperty': None, 'BooleanProperty': None, 'EmptyProperty': None, 'NestedProperty': {'NestedStringProperty': None, 'NestedNumberProperty': None}}

如果你确定它永远不会被嵌套,你可以选择oneliner dct = {k: None for k in dct.keys()}

相关问题