使用Python更新json文件中的列表并保持相同的缩进
我目前正在为我使用Pygame制作的游戏制作关卡编辑器。我将世界数据保存在一个json文件中,该文件包含每行中每列的不同块。通过我的级别编辑器,我更新了json文件,它可以工作,但是缩进被弄乱了,所以人类无法读取。每个级别的数据由一个包含许多其他列表的列表组成,并且在每个列表之后拆分该行。谢谢你帮助我 转储前(更新后我希望它的外观) 倾倒后:使用Python更新json文件中的列表并保持相同的缩进,python,json,Python,Json,我目前正在为我使用Pygame制作的游戏制作关卡编辑器。我将世界数据保存在一个json文件中,该文件包含每行中每列的不同块。通过我的级别编辑器,我更新了json文件,它可以工作,但是缩进被弄乱了,所以人类无法读取。每个级别的数据由一个包含许多其他列表的列表组成,并且在每个列表之后拆分该行。谢谢你帮助我 转储前(更新后我希望它的外观) 倾倒后: { "level_1_data": [ [ 1, 1,
{
"level_1_data": [
[
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1
],
[
1,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
1
],
[
1,
0,
0,
0,
0,
7,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
8,
1
],
[
1,
0,
0,
0,
0,
2,
0,
0,
0,
0,
0,
7,
0,
0,
0,
0,
0,
2,
2,
1
],
[
1,
0,
0,
0,
0,
0,
0,
0,
0,
0,
2,
2,
0,
7,
0,
5,
0,
0,
0,
1
],
[
1,
0,
0,
0,
0,
0,
0,
0,
5,
0,
0,
0,
2,
2,
0,
0,
0,
0,
0,
1
],
[
1,
7,
0,
0,
2,
2,
2,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
1
],
[
1,
2,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
1
],
[
1,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
7,
0,
0,
7,
0,
0,
0,
0,
1
],
[
1,
0,
2,
0,
0,
7,
0,
7,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
1
],
[
1,
0,
0,
2,
0,
0,
4,
0,
0,
0,
0,
3,
0,
0,
3,
0,
0,
0,
0,
1
],
[
1,
0,
0,
0,
0,
0,
0,
0,
0,
2,
2,
2,
2,
2,
2,
2,
0,
0,
0,
1
],
[
1,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
1
],
[
1,
0,
0,
0,
0,
0,
0,
0,
0,
0,
7,
0,
7,
0,
0,
0,
0,
2,
0,
1
],
[
1,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
1
],
[
1,
0,
0,
0,
0,
0,
0,
0,
0,
0,
2,
0,
2,
0,
2,
2,
2,
2,
2,
1
],
[
1,
0,
0,
0,
0,
0,
2,
2,
2,
6,
6,
6,
6,
6,
1,
1,
1,
1,
1,
1
],
[
1,
0,
0,
0,
0,
2,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1
],
[
1,
0,
0,
0,
2,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1
],
[
1,
2,
2,
2,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1
]
],
"level_2_data": [
[
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1
],
[
1,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
1
],
[
1,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
1
],
[
1,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
1
],
[
1,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
1
],
[
1,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
1
],
[
1,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
1
],
[
1,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
1
],
[
1,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
1
],
[
1,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
2,
2,
0,
0,
0,
0,
0,
1
],
[
1,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
1
],
[
1,
0,
0,
0,
0,
0,
0,
0,
0,
2,
2,
2,
0,
0,
0,
0,
0,
0,
0,
1
],
[
1,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
1
],
[
1,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
2,
2,
0,
0,
0,
0,
1
],
[
1,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
1
],
[
1,
0,
0,
0,
0,
0,
0,
0,
2,
2,
2,
2,
0,
0,
0,
0,
0,
0,
0,
1
],
[
1,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
1
],
[
1,
0,
0,
0,
0,
0,
2,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
1
],
[
1,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
1
],
[
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1,
1
]
]
}
这是我目前掌握的代码:
with open("./world_data.json", "r") as f:
data = json.load(f)
new_data = data[world.level_name] #Loading level_1_data or level_2_data
new_data[button[1][3][1]][button[1][3][0]] = 0 #Finding the right index in the 2 layered list
data[world.level_name] = new_data
data.update(data)
with open("./world_data.json", "w") as f:
json.dump(data, f, indent=4)
试着使用pprint,它会让你更接近你想要的
import pprint
with open("world_data.json", "w") as f:
pprint.pprint(data, stream = f)
@nobleknight这就是OP正在做的事情嗯,你是否碰巧在编辑时使用了VS代码,如果是这样,你可能需要关闭所有扩展,我将你的json复制到我的sys并尝试保存,它会自动格式化,就像你的一样(你不想要的方式)。@nobleknight区别在于它们做什么,而不是它们格式化输出的方式。我试过了,结果是same@mikeg我实际上在使用PyCharm,但因为你,我切换到了VS代码,出于某种原因,它实际上在VS代码中工作,json是可读的。
import pprint
with open("world_data.json", "w") as f:
pprint.pprint(data, stream = f)