根据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 "", line 1, in
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?