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

问题描述 投票:0回答:1

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

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

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

        ],
...

使用此类对象函数生成上述输出。

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时看不到构造函数中按名称跳过特定键的任何选项

python json pretty-print
1个回答
0
投票

您可以创建临时副本并从中删除这些键:

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'])
© www.soinside.com 2019 - 2024. All rights reserved.