Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python使用字符\“中断对json的解析;_Python_Json_Parsing_Ujson - Fatal编程技术网

Python使用字符\“中断对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字符串

如果我从字符串中删除字符
\“
,解析器解析得很好

不同解析器引发的异常包括:

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是有效的,我们发布了一个屏幕截图。