通过 json.loads 将 Python dict 转为 JSON:
Posted
技术标签:
【中文标题】通过 json.loads 将 Python dict 转为 JSON:【英文标题】:Python dict to JSON via json.loads: 【发布时间】:2011-06-02 01:59:56 【问题描述】:我对一些使用 HTTP POST 发送数据并应返回其内容为字典的 JSON 结果的代码进行了故障排除。我正在使用 XML-RPC 包装器来公开此服务。当wrapper从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,但我得到了同样的错误。 dict 是否以某种方式格式错误?是因为unicode吗?我也尝试将语言环境设置为 UTF-8,但没有成功。
任何帮助将不胜感激。
【问题讨论】:
感谢大家的帮助。我意识到我问错了问题,因为我正在尝试调试发送给我的使用 django-piston 的 API,而我以前没有使用过它。我的实际问题与 django-piston 以及为什么每当响应是 HTTP CREATED (201) 时我的响应的 Content-Type 总是设置为 text-plain 而不是 application/json 。我会将此作为一个单独的问题提出,因为原始问题与实际问题无关(尽管有关 JSON 行为的答案很有趣!)。 【参考方案1】:您尝试使用错误的方法。 json.loads
用于将 JSON 加载到 Python。如果你想将 Python 转换为 JSON,你需要json.dumps
。
result = json.dumps(response[1])
【讨论】:
我之前实际上已经想到了这一点,但是在更详细地查看了我的所有代码之后,我意识到我问错了问题。我的问题与 django-piston 以及为什么每当响应是 HTTP CREATED (201) 时我的响应的 Content-Type 总是设置为 text-plain 而不是 application/json 。我会将此作为一个单独的问题提出。 这给了我一个错误:“NestedMultiDict is not json serializable”【参考方案2】:我在 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]]')
【讨论】:
【参考方案3】:该 dict 是 Python dict 文字格式,而不是 JSON。你可以这样做:
import ast
result = ast.literal_eval(response[1])
以该格式读取响应。您确定 Django 尚未对响应进行 JSON 解码吗?
【讨论】:
literal_eval 不适用于日期时间对象。但我怀疑你是对的,其他东西已经在解析它。以上是关于通过 json.loads 将 Python dict 转为 JSON:的主要内容,如果未能解决你的问题,请参考以下文章
python json dumps与loads有可能犯的错误
Python json.loads ValueError,需要分隔符
python中json文件处理涉及的四个函数json.dumps()和json.loads()json.dump()和json.load()的区分
python中json文件处理涉及的四个函数json.dumps()和json.loads()json.dump()和json.load()的区分