python json转储输出格式

时间:2018-02-06 15:12:19

标签: python json python-3.x python-2.7 formatting

我的问题如下:

我输入了我想要读入json对象的内容,转换,然后将其写入文件。

为两个文件设置相同的格式/ whitspacing非常重要。文件的差异应该只显示确切的差异,数据中的变化。

我在python2中做了什么(并且工作得很好):

with open(newFilePath, 'w') as newJsonFile:

    dumped_json = json.dumps(jsonData, indent=2, sort_keys=False, ensure_ascii=False, separators=(',', ': ')).encode('utf8')
    tabbed_json = re.sub('\n +', lambda match: '\n' + '\t' * (len(match.group().strip('\n')) / 2), dumped_json)
    newJsonFile.write(tabbed_json)
    newJsonFile.close()

但是这个方法对我需要使用的python3不起作用。

如果我几乎和#34;相同" (前一个示例中缺少 encode(' utf8')函数调用,并且在re的lambda表达式中使用了 int()强制转换运算符。子())

with open(newFilePath, 'w') as newJsonFile:
    dumped_json = json.dumps(jsonData, indent=2, sort_keys=False, ensure_ascii=False, separators=(',', ': '))
    tabbed_json = re.sub('\n +', lambda match: '\n' + '\t' * int((len(match.group().strip('\n')) / 2)), dumped_json)
    newJsonFile.write(tabbed_json)
    newJsonFile.close()

我得到了不同格式的输出:

  • 有不必要的尾随空格,第一个列表项在' \ n'之后开始。 e.g:
      "bbbbb": ["ccccc"],
vs
      "bbbbb": [
          "ccccc"
      ],
  • 一些额外的' \ t'字符在列表项的字段名称之前加速(在JSON的更深层次上累积)

        "fffff": [{
            "aaaaa": {
                "ggggg": "hhhhh",
                "iiiii": "jjjjj"
            },
    
    vs
    
        "fffff": [
            {
                "aaaaa": {
                    "ggggg": "hhhhh",
                    "iiiii": "jjjjj"
                },
    
  • 总共有更多行

这是我读到的内容(这是我想要在输出中看到的确切格式,只需对数据进行一次简单修改):

{
    "aaaaa": {
        "bbbbb": ["ccccc"],
        "dddd": 1111
    },
    "eeeee": {
        "fffff": [{
            "aaaaa": {
                "ggggg": "hhhhh",
                "iiiii": "jjjjj"
            },
            "kkkkk": {
                "lllll": 2222,
                "mmmmm": 3333
            }
        },
        {
            "aaaaa": {
                "ggggg": "hhhhh",
                "iiiii": "nnnnn"
            },
            "kkkkk": {
                "ooooo": {
                    "ppppp": {
                        "qqqqq": 4444,
                        "rrrrr": 5555
                    },
                    "sssss": {
                        "qqqqq": 4444,
                        "rrrrr": 6666
                    }
                },
                "ttttt": 7777,
                "uuuuu": 8888
            }
        }],
        "vvvvv": [{
            "wwww": "xxxx",
            "yyyy": null
        }]
    }   
}

这是我写入文件后得到的结果(我没有在这里进行数据转换以保持简单):

{
    "aaaaa": {
        "bbbbb": [
            "ccccc"
        ],
        "dddd": 1111
    },
    "eeeee": {
        "fffff": [
            {
                "aaaaa": {
                    "ggggg": "hhhhh",
                    "iiiii": "jjjjj"
                },
                "kkkkk": {
                    "lllll": 2222,
                    "mmmmm": 3333
                }
            },
            {
                "aaaaa": {
                    "ggggg": "hhhhh",
                    "iiiii": "nnnnn"
                },
                "kkkkk": {
                    "ooooo": {
                        "ppppp": {
                            "qqqqq": 4444,
                            "rrrrr": 5555
                        },
                        "sssss": {
                            "qqqqq": 4444,
                            "rrrrr": 6666
                        }
                    },
                    "ttttt": 7777,
                    "uuuuu": 8888
                }
            }
        ],
        "vvvvv": [
            {
                "wwww": "xxxx",
                "yyyy": null
            }
        ]
    }
}

问题:

  • 如何在python 3中使用JSON dump()生成与输入相同的结果(我的第一个例子)?

修改 在我的示例中,JSON文件中有选项卡,stackoverflow以不同的格式进行格式化:

enter image description here

0 个答案:

没有答案