如何在执行json.dump时显式设置回车符?

时间:2017-01-25 03:25:01

标签: python json linux python-3.x carriage-return

我的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)

http://docs.python.jp/3/library/json.html

2 个答案:

答案 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。