Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/283.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.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';s simplejson不解析简单的json字符串_Python_Json - Fatal编程技术网

Python';s simplejson不解析简单的json字符串

Python';s simplejson不解析简单的json字符串,python,json,Python,Json,我尝试解析从网上得到的一个非常简单的json字符串:{“price”:“10.25”} 如您所见,数字(10.25)介于单引号之间,对于简单的json来说,这似乎是个问题: 复制: import simplejson as json json_str = """ {"price" : '10.25'} """ json.loads(json_str) 结果: Traceback (most recent call last): File "<stdin>", line 1, i

我尝试解析从网上得到的一个非常简单的json字符串:{“price”:“10.25”} 如您所见,数字(10.25)介于单引号之间,对于简单的json来说,这似乎是个问题:

复制:

import simplejson as json
json_str = """ {"price" : '10.25'} """
json.loads(json_str)
结果:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/pymodules/python2.5/simplejson/__init__.py", line 307, in loads
    return _default_decoder.decode(s)
  File "/usr/lib/pymodules/python2.5/simplejson/decoder.py", line 335, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/usr/lib/pymodules/python2.5/simplejson/decoder.py", line 353, in raw_decode
    raise ValueError("No JSON object could be decoded")
ValueError: No JSON object could be decoded
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“/usr/lib/pymodules/python2.5/simplejson/_init__.py”,第307行,加载
返回\u默认\u解码器。解码
文件“/usr/lib/pymodules/python2.5/simplejson/decoder.py”,第335行,解码中
obj,end=self.raw\u decode(s,idx=\u w(s,0.end())
原始解码中的文件“/usr/lib/pymodules/python2.5/simplejson/decoder.py”,第353行
raise VALUERROR(“无法解码JSON对象”)
ValueError:无法解码任何JSON对象
但是,如果我将单引号改为双引号,它会起作用\ 不幸的是,我得到的JSON并不像上面的例子那样简单,所以我不能用stringreplace命令替换所有的单引号

有人知道解析这个json的正确方法吗

另外,我使用python 2.5

非常感谢

{“price”:“10.25”}
,JSON仅包含双引号

带单引号的JSON无效(请参阅:www.jsonlint.com):

您可以使用regex replace更正json,或者使用ast.literal eval将其作为python对象加载(或者将其作为json转储并再次加载)


单引号不是有效的JSON,因此simplejson正在做它应该做的事情。不幸的是,问题在于您正在接收的JSON。我看不出一点正则表达式fu不能帮助您找到并替换所需的单引号。

如果只使用数字或双引号,则不应引用该值。因此,正确的方法是:

import simplejson as json
json_str = """ {"price" : 10.25} """
json.loads(json_str)

要替换它,您可以使用一些正则表达式解析json字符串,例如使用finditer检查什么是有效的json格式


如您所见,字符串(字典的键)只有双引号有效。

这不是有效的JSON。您可以将“和”混合在一起。JSON规范指示“只能使用”这确实是无效的。查看www.json.org(!)我想知道OP首先是如何/为什么得到无效的json的。听起来他们好像不在OP的控制之下。OP是否有责任处理不正确的JSON?听起来像是给他们的。值不一定是数字。@acron,对不起,我的错。更正了这一点。@DhruvPathak:似乎适用于python 2.7,但是,在我的产品中,我的python 2.5没有ast包…:(@diemacht我猜Python2.5中有一个ast模块,不确定它是否工作相同。
>>> a = """ {"price" : '10.25'} """
>>> import ast
>>> new_dict = ast.literal_eval(a.strip())
>>> import json
>>> json.dumps(new_dict)
'{"price": "10.25"}'
import simplejson as json
json_str = """ {"price" : 10.25} """
json.loads(json_str)