我已经对使用HTTP POST发送数据的一些代码进行了故障排除,并且应该返回其内容为字典的JSON结果。我使用XML-RPC包装器来公开此服务。当包装器从http响应变量接收到dict信息时,dict内容以这种形式出现在字符串中:
{'created': datetime.datetime(2010, 12, 31, 19, 13, 8, 379909), 'worker': u'GoogleWorker', 'ready': False, 'request_id': '8f1381853a444a42a37ae5152a3af947', 'owner': u'admin', 'shortname': u'test19'}
我正在尝试使用以下语句将下面的字符串转换为JSON结果:
result = json.loads(response[1])
但是,当我尝试使用json.loads将数据转换为JSON时,我收到以下错误:Fault: <Fault 1: "<type 'exceptions.ValueError'>:Expecting property name: line 1 column 1 (char 1)">
我手动尝试将上面的字符串转换为JSON,但是我得到了同样的错误。这个词典在某种程度上是不正确的吗?是unicode吗?我也尝试将语言环境设置为UTF-8,但这不成功。
非常感谢任何帮助。
答案 0 :(得分:33)
您正在尝试使用错误的方法。 json.loads
用于将JSON加载到Python 。如果要将Python转换为JSON,则需要json.dumps
。
result = json.dumps(response[1])
答案 1 :(得分:5)
该dict是Python dict文字格式,而不是JSON。你可以这样做:
import ast
result = ast.literal_eval(response[1])
以该格式读取响应。你确定Django还没有对响应进行JSON解码吗?
答案 2 :(得分:1)
我在django上使用了json,我用它:
import simplejson as json
#to encode
final= {'first':first_data,'second':second_data}
json.dumps(final)
#to decode this is the example from python's api
json.loads('["foo", {"bar":["baz", null, 1.0, 2]}]')