加载似乎包含 TAB 字符的JSON文件时,我遇到了解析问题。
当我转到http://jsonlint.com/时,我输入了带有TAB字符的部分:
{ "My_String": "Foo bar. Bar foo." }
验证者抱怨:
Parse error on line 2: { "My_String": "Foo bar. Bar foo." ------------------^ Expecting 'STRING', 'NUMBER', 'NULL', 'TRUE', 'FALSE', '{', '['
这实际上是有问题的JSON文本的复制/粘贴。
我曾尝试加载该文件,json并simplejson没有成功。如何正确加载?我应该只预处理文件并用\t空格替换TAB 吗?还是我在这里想念的东西?
json
simplejson
\t
这也是一个有问题的示例simplejson:
foo = '{"My_string": "Foo bar.\t Bar foo."}' simplejson.loads(foo) JSONDecodeError: Invalid control character '\t' at: line 1 column 24 (char 23)
从JSON标准:
在任何令牌之前或之后都可以使用无关紧要的空格。空格字符是:字符列表(U + 0009),换行符(U + 000A),回车符(U + 000D)和空格(U + 0020)。除令牌中允许使用空格外,任何令牌中都不允许使用空格。
这意味着在JSON字符串中不允许使用文字制表符。您需要将其转义为\t (在.json文件中):
{"My_string": "Foo bar.\t Bar foo."}
此外,如果在Python字符串文字中提供了json文本,则需要对标签进行两次转义:
foo = '{"My_string": "Foo bar.\\t Bar foo."}' # in a Python source
或使用Python原始字符串文字:
foo = r'{"My_string": "Foo bar.\t Bar foo."}' # in a Python source