python json.loads_Python json.loads不起作用

I've been trying to figure out how to load JSON objects in Python.

def do_POST(self):

length = int(self.headers['Content-Length'])

decData = str(self.rfile.read(length))

print decData, type(decData)

"{'name' : 'journal2'}"

postData = json.loads(decData)

print postData, type(postData)

#{'name' : 'journal2'}

postData = json.loads(postData)

print postData, type(postData)

# Error: Expecting property name enclosed in double quotes

Where am I going wrong?

Error Code (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);

True Code (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(JSON.stringify(data));

True Code (Python):

def do_POST(self):

length = int(self.headers['Content-Length'])

decData = self.rfile.read(length)

postData = json.loads(decData)

postData = json.loads(postData)

解决方案

Your JSON data is enclosed in extra quotes making it a JSON string, and the data contained within that string is not JSON.

Print repr(decData) instead, you'll get:

'"{\'name\' : \'journal2\'}"'

and the JSON library is correctly interpreting that as one string with the literal contents {'name' : 'journal2'}. If you stripped the outer quotes, the contained characters are not valid JSON, because JSON strings must always be enclosed in double quotes.

For all the json module is concerned, decData could just as well have contained "This is not JSON" and postData would have been set to u'This is not JSON'.

>>> import json

>>> decData = '''"{'name' : 'journal2'}"'''

>>> json.loads(decData)

u"{'name' : 'journal2'}"

>>> json.loads(json.loads(decData))

Traceback (most recent call last):

File "", line 1, in

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)

Fix whatever is producing this string, your view is fine, it's the input that is broken.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值