在转储缩进的JSON时,如何在输出数组中抑制换行符?

uxhixvfz  于 4个月前  发布在  其他
关注(0)|答案(3)|浏览(73)

我有这个代码:

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))

字符串
我得到的输出如下:

{
    "object": {
        "key": "value",
        "boolean": true
    },
    "array": [
        1,
        2,
        3
    ]
}


我希望"array"数组的元素出现在同一行上,如下所示:

{
    "object": {
        "key": "value",
        "boolean": true
    },
    "array": [1, 2, 3]
}


我如何才能得到这个结果?

eoxn13cs

eoxn13cs1#

您的任务可以通过使用像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]
}

knpiaxh1

knpiaxh12#

你不需要任何新的模块来解决这个问题。JSON输出是一个字符串类型,你可以使用loopif/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)

字符串
不幸的是,它还剥离了列表中的空格字符。输出是:

{
    "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)


输出:

{
    "object": {
        "key": "value",
        "boolean": true
    },
    "array": [1, 2, 3]
}

w7t8yxp5

w7t8yxp53#

我有一个解决方案,但它是黑客和涉及猴子匹配json的库encoder.py

import json
a = {
    "header": [["l","f","f"],["f","f","f"]],
    "data": [[1,1,3], [1,1,3]]
}
json.encoder.pretty_json_lists = True
print(json.dumps(a, indent=4))

字符串
json是这样的:

{
    "header": [
        ["l","f","f"],
        ["f","f","f"]
    ],
    "data": [
        [1,1,3],
        [1,1,3]
    ]
}


补丁encoder.py可以在这里找到-https://gist.github.com/Andrej730/38febfb059e12f3e67fe72703414ccf9

相关问题