如何防止Python JSON .dumps()函数去掉回车符?

问题描述 投票:0回答:1

在 Python 中,我尝试读取 JSON 文件,更改单个值,然后对从

.dumps()
函数返回的字符串进行进一步处理。但是,调用
json.dumps()
后,返回的字符串已删除
/r
字符。

对于我的应用程序来说,保持原始格式非常重要。 json.dumps()的文档没有指定行结尾的方法。我看不出还有什么可能导致此删除。

我做错了什么吗,或者有没有办法维护行结尾,而不必强行输出(即替换、写入具有正确行结尾的新文件等)?

举个简单的例子:

with open('./test.json', 'rb') as test_file:
   for line in test_file:
      print(line)
      # This prints lines that look like:
      # b'{\r\n'
      # b'   "yay": "JSON!"\r\n'
      # b'}'
   test_file.seek(0,0)
   
   json_object = json.load(test_file)
   json_dump = json.dumps(json_object, indent=3)
   print(repr(json_dump))
   # This prints:
   # '{\n   "yay": "JSON!"\n}'
   #    ^\r removed       ^\r removed
python json line-endings
1个回答
0
投票

无需强行输出(即替换、写入具有正确行结尾的新文件等)?

工作量不大。

只需指定当您打开输出文件时想要使用的换行符

with open("foo.json", "w", newline="\r\n") as f:
    f.write('{\n   "yay": "JSON!"\n}')

将输出写入流时,如果 newline

None
,则写入的任何
'\n'
字符都将转换为系统默认行分隔符
os.linesep
。如果 newline
''
'\n'
,则不进行任何翻译。如果 newline 是任何其他合法值,则写入的任何
'\n'
字符都将转换为给定字符串。

© www.soinside.com 2019 - 2024. All rights reserved.