我的问题如下:
我输入了我想要读入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()
我得到了不同格式的输出:
"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
}
]
}
}
问题:
修改 在我的示例中,JSON文件中有选项卡,stackoverflow以不同的格式进行格式化: