Python Json-强制每个开口的花括号显示在新的单独行中

Python Json-强制每个开口的花括号显示在新的单独行中,python,json,python-2.7,Python,Json,Python 2.7,在我的代码中使用json.dumps(一些dict,indent=4,sort\u keys=True) 我得到这样的东西: { "a": { "x":1, "y":2 }, "b": { "z":3, "w":4 } } { "a": { "x":1, "y":2 }, "b": { "z":3,

在我的代码中使用
json.dumps(一些dict,indent=4,sort\u keys=True)

我得到这样的东西:

{
    "a": {
        "x":1,
        "y":2
    },
    "b": {
        "z":3,
        "w":4
    }
}
{
    "a":
    {
        "x":1,
        "y":2
    },
    "b":
    {
        "z":3,
        "w":4
    }
}
但我想要这样的东西:

{
    "a": {
        "x":1,
        "y":2
    },
    "b": {
        "z":3,
        "w":4
    }
}
{
    "a":
    {
        "x":1,
        "y":2
    },
    "b":
    {
        "z":3,
        "w":4
    }
}
如何强制每个开口的花括号出现在新的单独行的开头

我是否必须编写自己的JSON序列化程序,或者在调用
JSON.dumps
时是否可以使用特殊参数


谢谢。

您可以对结果使用正则表达式替换

better_json = re.sub(r'^((\s*)".*?":)\s*([\[{])', r'\1\n\2\3', json, flags=re.MULTILINE)
第一个捕获组匹配所有内容,直到属性名称后的
,第二个捕获组匹配属性名称前的空格,第三个捕获组捕获
{
[
在对象或数组之前。然后在换行后复制空白,以便缩进正确匹配


基于Barmar的出色回答,下面是一个更完整的演示,展示了如何在Python中转换和自定义JSON:

import json
import re


# JSONifies dict and saves it to file
def save(data, filename):

    with open(filename, "w") as write_file:

        write_file.write(jsonify(data))


# Converts Python dict to a JSON string. Indents with tabs and puts opening
# braces on their own line.
def jsonify(data):

    default_json = json.dumps(data, indent = '\t')

    better_json = re.sub(
        r'^((\s*)".*?":)\s*([\[{])',
        r'\1\n\2\3',
        default_json,
        flags=re.MULTILINE
    )

    return better_json


# Sample data for demo
data = {
    "president":
    {
        "name": "Zaphod Beeblebrox",
        "species": "Betelgeusian"
    }
}

filename = 'test.json'


# Demo
print("Here's your pretty JSON:")
print(jsonify(data))
print()
print('Saving to file:', filename)
save(data, filename)

我不认为有人会这样写JSON。你为什么需要它?你可以使用现有的
JSON.dumps()
,然后对它进行后期处理以查找
:{
,并用换行符和适当数量的空格替换空格。非常感谢!!!我意识到我也需要它来做方括号。我是否只需要添加
\[
在您的代码行中每个
\{
旁边?@goodvibration您可以使用
[\[{]
匹配开头的方括号和花括号。您需要将其放在另一个捕获组中,以便将其复制到替换组中。