我的python脚本生成json文件。我必须支持这个在Windows和Linux上运行的python文件。问题是Windows和Linux上的回车差异。当我在Windows上运行此代码时,它输出CRLF json。当我在linux上运行时输出LF json。
那么在python3.5中进行json转储时如何显式设置回车?我好意思
import json
fpath = "hoge.json"
data = {"AGE": 12, "HOGE": [{"GUA": 3}]}
with open(fpath, 'wt', encoding="utf-8") as outfile:
json.dump(data, outfile, indent=4, sort_keys=True, ensure_ascii=False)
答案 0 :(得分:5)
如果你坚持一致的CRLF行为(JSON规范要求解析器同时处理它们,但是在某些纯文本阅读器中打开它可能会更容易使用一致的CRLF),解决方案是在the open
function,而不是json
模块。
只需将newline='\r\n'
传递给open
,它就可以在所有系统上无缝地将\n
写的任何json
翻译成\r\n
,而不是默认行为转换为os.linesep
(在Windows上为\r\n
,在大多数其他操作系统上为\n
):
with open(fpath, 'w', encoding="utf-8", newline='\r\n') as outfile:
json.dump(data, outfile, indent=4, sort_keys=True, ensure_ascii=False)
答案 1 :(得分:2)
行结尾是json规范中的空格(here第2部分底部):
在六个中的任何一个之前或之后允许无关紧要的空白 结构特征。
ws = *( %x20 / ; Space %x09 / ; Horizontal tab %x0A / ; Line feed or New line %x0D ) ; Carriage return
意味着每个读者都必须同时处理CR和LF。