【发布时间】:2016-08-25 13:01:01
【问题描述】:
我有一个现有的 JSON 文件并尝试将字符串添加到文件中。但是一旦我写了一个 JSON 文件,新行字符就会在 JSON 文件中消失并且格式会改变。
下面是代码:
#!/usr/bin/python
import json
userinput = raw_input('Enter the name of a file a you want to read: ')
with open(userinput) as json_data:
s = json_data.read()
data = json.loads(s)
print data['classes']
json_data.close()
class_add = raw_input('Enter the name of a class a you want to add: ')
if class_add in data['classes']:
print "Class %s already exists, doing nothing." % class_add
else:
data['classes'].append(class_add)
print json.dumps(data)
print data['classes']
with open(userinput, 'w') as json_data:
json_data.write(json.dumps(data))
json_data.close()
这里还有一个重要的事情是 JSON 文件的格式。因此,默认情况下,我们将拥有以下格式的文件。
# cat test.json
{
"selinux_mode": "enforcing",
"cis_manages_auditd_service": true,
"classes": [ "basic", "admin", "lvm"]
}
#
但是一旦我们添加了这个类,它就会变成下面这样。
# cat test.json
{"cis_manages_auditd_service": true, "classes": [ "basic", "admin", "lvm"], "selinux_mode": "enforcing"}
有什么方法可以让 JSON 空格和换行符保持原样而不改变任何内容。
【问题讨论】:
-
你为什么叫
json_data.close(),那个文件描述符在with语句的末尾关闭。 -
不知道当我们使用 with 语句时它会自动关闭文件。从现在开始,我不会再使用它了。谢谢
-
您无法将
json.dumps()的格式控制到您想要的程度。可以通过在调用中添加indent=4参数来提高输出的可读性。