我有一个如下所示的JSON文件:
{"environment": "production",
"classes":
{"nfs::server": {"exports": ["/srv/share1","/srv/share3"]}}
}
当我使用Python 3.6运行以下代码时
fp=open('example.json', 'r')
data=json.load(fp)
print(50*'-')
print(json.dumps(data, indent=4))
print(50*'-')
json.dump(data, sys.stdout, indent=4)
我得到了输出:
--------------------------------------------------
{
"environment": "production",
"classes": {
"nfs::server": {
"exports": [
"/srv/share1",
"/srv/share3"
]
}
}
}
--------------------------------------------------
{
"environment": "production",
"classes": {
"nfs::server": {
"exports": [
"/srv/share1",
"/srv/share3"
]
}
}
}%
我的问题是为什么%
输出中包含的额外json.dump
与json.dumps
字符串相比较?它不是操作系统的工件,因为如果我提供文件对象而不是sys.stdout
,它也会被写入文件。
答案 0 :(得分:2)
最后一个%是控制台提示行的第一个字符 或shell的一个功能(https://unix.stackexchange.com/questions/167582/why-zsh-ends-a-line-with-a-highlighted-percent-symbol)
与json无关,也与python无关。
因为,当print()在末尾添加'\ n'时,转储到stdout不会
答案 1 :(得分:1)
原因是print(json.dumps(data, indent=4))
打印换行符,而json.dump(data, sys.stdout, indent=4)
则不会。
您可以尝试在最后添加print()
:
print(50*'-')
print(json.dumps(data, indent=4))
print(50*'-')
json.dump(data, sys.stdout, indent=4)
print()
%
符号是您的shell提示符的一部分吗?