根据
这个答案
, 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()
,我就会得到一个异常。
'{"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)
My questions:
Does json.load()
automatically escape \n
inside the file object?
Should one always do \\n
regardless of whether the JSON will be read by json.load()
or json.loads()
?