我在加载 JSON 文件时遇到解析问题,这些文件似乎具有TAB他们身上的性格。
当我去http://jsonlint.com/ 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
and simplejson
没有成功。我怎样才能正确加载这个?我应该预处理文件并将 TAB 替换为\t
或者通过一个空格?或者我在这里缺少什么?
Update:
这也是一个有问题的例子simplejson
:
foo = '{"My_string": "Foo bar.\t Bar foo."}'
simplejson.loads(foo)
JSONDecodeError: Invalid control character '\t' at: line 1 column 24 (char 23)
From JSON标准 http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf:
任何标记之前或之后允许存在无关紧要的空格。这
空白字符有:字符制表(U+0009)、换行
(U+000A)、回车符 (U+000D) 和空格 (U+0020)。空白是
任何令牌中都不允许,除了允许有空格
字符串。
这意味着 JSON 字符串中不允许使用文本制表符。你需要逃避它\t
(在 .json 文件中) http://ideone.com/QOdHwH:
{"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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)