Python使用字符\“中断对json的解析;
我试图用转义字符(我猜是某种类型)解析json字符串 如果我从字符串中删除字符Python使用字符\“中断对json的解析;,python,json,parsing,ujson,Python,Json,Parsing,Ujson,我试图用转义字符(我猜是某种类型)解析json字符串 如果我从字符串中删除字符\“,解析器解析得很好 不同解析器引发的异常包括: 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
\“
,解析器解析得很好
不同解析器引发的异常包括:
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)
ValueError: Unexpected character in found when decoding object value
ujson
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)
ValueError: Unexpected character in found when decoding object value
如何使解析器转义这个字符
更新:
在本例中,ps.json作为ujson导入
这就是我的ide显示的内容
逗号只是意外添加的,它在json末尾没有尾随逗号,json是有效的
字符串定义。几乎可以肯定,您没有正确定义转义反斜杠。如果您正确定义字符串,JSON解析就会很好: 请注意,我在Python中使用了原始字符串文字来定义字符串;如果我没有使用,Python将解释
\“
,并插入一个常规的”
。否则,必须将反斜杠加倍:
>>> print '\"'
"
>>> print '\\"'
\"
>>> print r'\"'
\"
将解析后的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.\""}
如果您没有转义\
转义,您将以未转义的引号结束:
>>> 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)
>>json\u str\u unproblem=''
... {
…“出版商”:“O'Reilly媒体公司”
... }
... '''
>>>打印json\u str\u不正确
{
“出版商”:“O'Reilly Media,Inc.”
}
>>>加载(json\u str\u不正确)
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“/Users/mj/Development/Library/buildout.python/parts/opt/lib/python2.7/json/_init__.py”,第338行,加载
返回\u默认\u解码器。解码
文件“/Users/mj/Development/Library/buildout.python/parts/opt/lib/python2.7/json/decoder.py”,第366行,在decode中
obj,end=self.raw\u decode(s,idx=\u w(s,0.end())
文件“/Users/mj/Development/Library/buildout.python/parts/opt/lib/python2.7/json/decoder.py”,第382行,原始解码
obj,end=self.scan_一次(s,idx)
ValueError:应为,分隔符:第3行第20列(字符22)
请注意,
\“
序列现在打印为”
,反斜杠消失了!您的JSON无效。如果您对JSON对象有疑问,您可以始终使用验证它们。在您的情况下,您有一个对象
{
"publisher": "\"O'Reilly Media, Inc.\"",
}
还有一个额外的逗号,表示应该会发生其他事情
第2行的分析错误:
…埃迪亚公司\“”,}
---------------------^
应为“字符串”
这将开始帮助您找到错误所在
删除的逗号
{
"publisher": "\"O'Reilly Media, Inc.\""
}
屈服
有效的JSON
更新:我保留了关于JSONlint的内容,因为它可能会在将来对其他人有所帮助
import json
d = {
"publisher": "\"O'Reilly Media, Inc.\""
}
print "Here is your string parsed."
print(json.dumps(d))
屈服
这是您解析的字符串。
{“出版商”:“\”O'Reilly Media,Inc.\”}
进程已完成,退出代码为0
你如何定义输入字符串?当你打印字符串时,你仍然看到反斜杠吗?我根本无法复制它。如果输入字符串位于Python源代码中,你可能首先需要在其中保存元字符。如果是这样的话,考虑原始字符串。@ MARTIJNPITETER意外添加,问题是字符<代码>。/“您能告诉我们启动解析的方法吗?@Marty:注意,您的屏幕截图显示您正在定义Python字符串,因此
\“
被解释为Python字符串文字转义。反斜杠在您生成的实际值中消失了。您已经更新了问题,很抱歉出现意外的尾随逗号,json是有效的。谢谢您,根据此答案将字符串定义为原始(r
)解决了问题。请注意,问题的错误消息被弄乱了,已更新。很抱歉出现意外的尾随逗号,json是有效的,我们发布了一个屏幕截图。