考虑以下代码:
>>> import json
>>> data = {
... 'x': [1, {'$special': 'a'}, 2],
... 'y': {'$special': 'b'},
... 'z': {'p': True, 'q': False}
... }
>>> print(json.dumps(data, indent=2))
{
"y": {
"$special": "b"
},
"z": {
"q": false,
"p": true
},
"x": [
1,
{
"$special": "a"
},
2
]
}
我想要的是格式化JSON,以便只有一个属性'$special'
的JSON对象在一行上呈现,如下所示。在
我尝试过实现一个自定义的^{cls
参数传递给json.dumps
,但是{
对JSONEncoder
^{JSONEncoder
^{
JSONEncoder
^{data
只调用一次。
有没有办法让JSONEncoder
做我想做的事?在
您可以这样做,但基本上您必须复制/修改
json.encoder
中的许多代码,因为编码函数并不是真正设计为部分重写的。在基本上,从
json.encoder
复制_make_iterencode
的全部内容并进行更改,这样您的特殊字典就可以打印出来,而不会出现换行缩进。然后monkeypatch json包以使用您修改的版本,运行json转储,然后撤消monkeypatch(如果需要)。在_make_iterencode
函数很长,所以我只发布了需要更改的部分。在我发现以下基于regex的解决方案是最简单的,尽管它是基于regex的。在
输出如下。在
^{pr2}$json
模块的设计并不是为了让您对输出有那么多的控制;缩进主要是为了在调试时提高可读性。在您可以使用标准库^{} module 转换输出,而不是让^{cd1>}生成输出:
这将成功地重新格式化您的示例:
^{pr2}$相关问题 更多 >
编程相关推荐