【发布时间】:2018-01-16 04:03:01
【问题描述】:
根据this answer,JSON 字符串中的换行符应始终被转义。当我使用json.load() 加载 JSON 时,这似乎没有必要。
我已将以下字符串保存到文件中:
{'text': 'Hello,\n How are you?'}
使用 json.load() 加载 JSON 不会引发异常,即使 \n 未转义:
>>> with open('test.json', 'r') as f:
... json.load(f)
...
{'text': 'Hello,\n How are you?'}
但是,如果我使用json.loads(),我会得到一个异常:
>>> s
'{"text": "Hello,\n How are you?"}'
>>> json.loads(s)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "c:\Python34\lib\json\__init__.py", line 318, in loads
return _default_decoder.decode(s)
File "c:\Python34\lib\json\decoder.py", line 343, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "c:\Python34\lib\json\decoder.py", line 359, in raw_decode
obj, end = self.scan_once(s, idx)
ValueError: Invalid control character at: line 1 column 17 (char 16)
我的问题:
-
json.load()是否会在文件对象中自动转义\n? - 无论 JSON 是否将被
json.load()或json.loads()读取,是否应该始终使用\\n?
【问题讨论】:
-
您没有加载相同的字符串...您编写的字符串根本不是有效的 JSON。该文件可能有
\n转义 -
@JBernardo 据我所知,文件是一样的:我保存了文件。
-
那么就是你的问题了......你实际上在文本编辑器上的一个文件上写了
\n,这与转义它是一样的。顺便说一句,您不应该手动编写 JSON。你有一个dumps函数是有原因的 -
那么当 Python 读取一个文件时,它会自动转义它找到的任何
\n吗?还是文件编辑器在将文件保存到磁盘时做了一些特殊的事情? -
顺便说一句,这是一个人为的例子。我的实际用例是从一个 API 读取,该 API 提供一个 JSON 文件,其中包含未转义的
\n字符。
标签: python json python-3.4