是否可以跳过 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'])
使用 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'])