Python json.loads不';行不通

Python json.loads不';行不通,python,json,Python,Json,我一直在想如何在Python中加载JSON对象 def do_POST(self): length = int(self.headers['Content-Length']) decData = str(self.rfile.read(length)) print decData, type(decData) "{'name' : 'journal2'}" <type 'str'> postData = json.loads(decDat

我一直在想如何在Python中加载JSON对象

   def do_POST(self):
    length = int(self.headers['Content-Length'])
    decData = str(self.rfile.read(length))
    print decData, type(decData)
    "{'name' : 'journal2'}" <type 'str'>
    postData = json.loads(decData)
    print postData, type(postData)
    #{'name' : 'journal2'} <type 'unicode'>
    postData = json.loads(postData)
    print postData, type(postData)
    # Error: Expecting property name enclosed in double quotes
真实代码(JScript):

var data = "{'name':'journal2'}";
var http_request = new XMLHttpRequest();
http_request.open( "post", url, true );
http_request.setRequestHeader('Content-Type', 'application/json');
http_request.send(data);
var data = '{"name":"journal2"}';
var http_request = new XMLHttpRequest();
http_request.open( "post", url, true );
http_request.setRequestHeader('Content-Type', 'application/json');
http_request.send(JSON.stringify(data));
   def do_POST(self):
    length = int(self.headers['Content-Length'])
    decData = self.rfile.read(length)
    postData = json.loads(decData)
    postData = json.loads(postData)
真实代码(Python):

var data = "{'name':'journal2'}";
var http_request = new XMLHttpRequest();
http_request.open( "post", url, true );
http_request.setRequestHeader('Content-Type', 'application/json');
http_request.send(data);
var data = '{"name":"journal2"}';
var http_request = new XMLHttpRequest();
http_request.open( "post", url, true );
http_request.setRequestHeader('Content-Type', 'application/json');
http_request.send(JSON.stringify(data));
   def do_POST(self):
    length = int(self.headers['Content-Length'])
    decData = self.rfile.read(length)
    postData = json.loads(decData)
    postData = json.loads(postData)

JSON数据包含在额外的引号中,使其成为JSON字符串,而该字符串中包含的数据不是JSON

打印
repr(decData)
,您将得到:

'"{\'name\' : \'journal2\'}"'
JSON库正确地将其解释为一个字符串,文本内容为
{'name':'journal2'}
。如果去掉外部引号,则包含的字符不是有效的JSON,因为JSON字符串必须始终用双引号括起来

对于所有的
json
模块而言,
decData
也可以包含
“这不是json”
,而
postData
则被设置为
u'这不是json'

>>> import json
>>> decData = '''"{'name' : 'journal2'}"'''
>>> json.loads(decData)
u"{'name' : 'journal2'}"
>>> json.loads(json.loads(decData))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/__init__.py", line 326, in loads
    return _default_decoder.decode(s)
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.py", line 366, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.py", line 382, in raw_decode
    obj, end = self.scan_once(s, idx)
ValueError: Expecting property name: line 1 column 1 (char 1)
导入json >>>decData='''''''{'name':'journal2'}'''' >>>加载(decData) u“{'name':'journal2'}” >>>json.loads(json.loads(decData)) 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 文件“/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/_init__.py”,第326行,加载 返回\u默认\u解码器。解码 文件“/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.py”,第366行,在decode中 obj,end=self.raw\u decode(s,idx=\u w(s,0.end()) 原始解码中的文件“/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/decoder.py”,第382行 obj,end=self.scan_一次(s,idx) ValueError:应为属性名称:第1行第1列(字符1)
修复生成此字符串的任何内容,您的视图是正常的,是输入被破坏。

要解决“期望属性名包含在双引号中”的错误,可以执行以下操作:

import json
data = "{'name' : 'journal2'}"
json.loads(json.dumps(data))

您也可以使用
eval

data = "{'name' : 'test'}"
eval(data)

它可以工作并返回一个命令。

这是不对的,
eval(data)
可能会得到正确的结果。这是正确的,但您不应该使用eval()。我认为这是使用json模块的想法。使用eval被认为是一种不好的做法,我认为这是一个有趣的答案,从公认的答案来看,你的起点是错误的(你需要
data=''''''''{'name':'journal2'}''
来准确地表示OP给出的内容),这可能意味着
eval
没有什么帮助。