[英]How can I suppress newlines within an output array when dumping indented JSON?
我有这个代码:
import json
my_list = [1, 2, 3]
my_dict = {"key": "value", "boolean": True}
my_json = {"object": my_dict, "array": my_list}
print(json.dumps(my_json, indent=4))
我得到一个 output 像:
{
"object": {
"key": "value",
"boolean": true
},
"array": [
1,
2,
3
]
}
我希望"array"
数组的元素出现在同一行,如下所示:
{
"object": {
"key": "value",
"boolean": true
},
"array": [1, 2, 3]
}
我怎样才能得到这个结果?
你的任务可以通过使用像jsbeautifier
这样的库来完成
使用以下命令安装库:
pip install jsbeautifier
然后添加选项并调用jsbeautifier.beautify()
函数。
完整代码:
import json
import jsbeautifier
my_list = [1, 2, 3]
my_dict = {"key": "value", "boolean": True}
my_json = {"object": my_dict, "array": my_list}
options = jsbeautifier.default_options()
options.indent_size = 2
print(jsbeautifier.beautify(json.dumps(my_json), options))
输出:
{
"object": {
"key": "value",
"boolean": true
},
"array": [1, 2, 3]
}
您不需要任何新模块来解决此问题。 JSON output 是字符串类型,您可以使用loop
和if/elif/else
来解决它,如下例所示:
import json
my_list = [1, 2, 3]
my_dict = {"key": "value", "boolean": True}
my_json = {"object": my_dict, "array": my_list}
json_dumps = json.dumps(my_json, indent=4)
str_to_write = ''
skip = 0
for char in json_dumps :
if (skip == 1) and ((char == '\n') or (char == ' ')) :
pass
elif (char == '[') :
skip = 1
str_to_write = str_to_write + char
elif (char == ']') :
skip = 0
str_to_write = str_to_write + char
else :
str_to_write = str_to_write + char
print(str_to_write)
不幸的是,它还去掉了列表中的空格字符。 output 是:
{
"object": {
"key": "value",
"boolean": true
},
"array": [1,2,3]
}
使用regex
模块,您可以保留空格:
import regex as re
import json
my_list = [1, 2, 3]
my_dict = {"key": "value", "boolean": True}
my_json = {"object": my_dict, "array": my_list}
json_dumps = json.dumps(my_json, indent=4)
start = [m.start() for m in re.finditer('\[', json_dumps)]
end = [m.start() + 1 for m in re.finditer('\]', json_dumps)]
original = []
alterated = []
for s, e in zip(start, end) :
original.append(json_dumps[s:e])
alterated.append(json_dumps[s:e].replace('\n', '').replace(' ', '').replace(',', ', '))
for o, a in zip(original, alterated) :
json_dumps = json_dumps.replace(o, a)
print(json_dumps)
output:
{
"object": {
"key": "value",
"boolean": true
},
"array": [1, 2, 3]
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.