是否可以跳过 python json.dumps 中的特定键和关联值的输出?

Is it possible to skip outputting specific key and associated values in python json.dumps?

使用 json.dumps 我有以下输出。

{
"1": {
    "fooBar": {
        "_foo": "foo",
        "_bar": "bar",
        "_id": "1"

    },
    "longValueList": [
        [
            1,
            2,
            ...
            n,

        ],
...

以上输出是使用此 class 对象函数生成的。

def toJSON(self):
    return json.dumps(self._container, default=lambda o: o.__dict__,
                      sort_keys=True, indent=4)

longValueList 与非常长的值列表相关联,在执行这些特定的 json 打印时我不需要打印它。如何防止 pythons json.dumps 打印键和值?查看 python json.dumps 的文档,在调用 json.dumps

时,我在构造函数中看不到任何按名称跳过特定键的选项

您可以创建一个临时副本并从中删除这些密钥:

from functools import reduce
import operator as op

def toJSON(self, skip=()):
    obj = self._container.copy()
    for path in skip:
        del reduce(op.getitem, path[:-1], obj)[path[-1]]
    return json.dumps(obj, default=lambda o: o.__dict__,
                      sort_keys=True, indent=4)

然后您可以将键指定为路径:

foo.toJSON(skip=[('1', 'longValueList')])

这也适用于列表索引:

foo.toJSON(skip=[('1', 'longValueList', 2)])

作为修改,您还可以使用路径分隔符,例如(但不适用于列表索引):

from functools import reduce
import operator as op

def toJSON(self, skip=()):
    obj = self._container.copy()
    for path in skip:
        path = path.split('/')
        del reduce(op.getitem, path[:-1], obj)[path[-1]]
    return json.dumps(obj, default=lambda o: o.__dict__,
                      sort_keys=True, indent=4)

foo.toJSON(skip=['1/longValueList'])