Mar*_*rty 2 python parsing json ujson
我正在尝试使用转义字符解析json字符串(我想某种方式)
{
"publisher": "\"O'Reilly Media, Inc.\""
}
Run Code Online (Sandbox Code Playgroud)
如果我\"从字符串中删除字符,Parser解析得很好,
不同解析器引发的异常是,
JSON
File "/usr/lib/python2.7/json/__init__.py", line 338, in loads
return _default_decoder.decode(s)
File "/usr/lib/python2.7/json/decoder.py", line 366, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/usr/lib/python2.7/json/decoder.py", line 382, in raw_decode
obj, end = self.scan_once(s, idx)
ValueError: Expecting , delimiter: line 17 column 20 (char 392)
Run Code Online (Sandbox Code Playgroud)
ujson
ValueError: Unexpected character in found when decoding object value
Run Code Online (Sandbox Code Playgroud)
如何让解析器转义这个字符?
这就是我的想法
comma只是意外添加,它在json的末尾没有尾随逗号,json是有效的
字符串定义.
你几乎肯定没有定义正确的转义反斜杠.如果你正确定义字符串,JSON解析就好了:
>>> import json
>>> json_str = r'''
... {
... "publisher": "\"O'Reilly Media, Inc.\""
... }
... ''' # raw string to prevent the \" from being interpreted by Python
>>> json.loads(json_str)
{u'publisher': u'"O\'Reilly Media, Inc."'}
Run Code Online (Sandbox Code Playgroud)
请注意,我使用原始字符串文字来定义Python中的字符串; 如果我没有,那\"将由Python解释并"插入常规.否则你必须加倍反斜杠:
>>> print '\"'
"
>>> print '\\"'
\"
>>> print r'\"'
\"
Run Code Online (Sandbox Code Playgroud)
将解析后的Python结构重新编码回JSON会显示反斜杠重新出现,repr()字符串的输出使用相同的双反斜杠:
>>> json.dumps(json.loads(json_str))
'{"publisher": "\\"O\'Reilly Media, Inc.\\""}'
>>> print json.dumps(json.loads(json_str))
{"publisher": "\"O'Reilly Media, Inc.\""}
Run Code Online (Sandbox Code Playgroud)
如果你没有逃脱\逃脱,你最终会得到未转义的引号:
>>> json_str_improper = '''
... {
... "publisher": "\"O'Reilly Media, Inc.\""
... }
... '''
>>> print json_str_improper
{
"publisher": ""O'Reilly Media, Inc.""
}
>>> json.loads(json_str_improper)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Users/mj/Development/Library/buildout.python/parts/opt/lib/python2.7/json/__init__.py", line 338, in loads
return _default_decoder.decode(s)
File "/Users/mj/Development/Library/buildout.python/parts/opt/lib/python2.7/json/decoder.py", line 366, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/Users/mj/Development/Library/buildout.python/parts/opt/lib/python2.7/json/decoder.py", line 382, in raw_decode
obj, end = self.scan_once(s, idx)
ValueError: Expecting , delimiter: line 3 column 20 (char 22)
Run Code Online (Sandbox Code Playgroud)
请注意,\"序列现在打印为",反斜杠消失了!
| 归档时间: |
|
| 查看次数: |
4263 次 |
| 最近记录: |