Python json dump

时间:2017-03-24 14:30:19

标签: python json

我有一个如下所示的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.dumpjson.dumps字符串相比较?它不是操作系统的工件,因为如果我提供文件对象而不是sys.stdout,它也会被写入文件。

2 个答案:

答案 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提示符的一部分吗?