python,json.loads期望属性名称:第1行第2列(char 2)

时间:2013-10-11 03:20:24

标签: python django json

我已经四处搜索了,我所知道的是JSON不知何故被破坏了。 我在字典列表中调用json.dumps,然后将其保存到django模型对象中。当我尝试通过调用json.loads重新读取它时,我收到了Expecting property name: line 1 column 2 (char 2)异常。

这是我的代码。如果已经存在会话,则它会尝试将文本加载到消息列表中并附加新消息(但不会成功)。如果它不存在,那么它只是将它附加到一个空列表并保存(有效)。

convo = Conversation()
messages = []
if request.POST.get('convo_pk',''):
    convo = Conversation.objects.get(pk = request.POST['convo_pk'])
    messages = json.loads(convo.text) #this is where it dies
else:
    convo.offer = Offer.objects.get(pk = request.POST['offer_pk'])
new_message = json.loads(request.POST['message'])
messages.append(new_message)
convo.text = messages
convo.save()

在django管理面板中,这是正在保存的json。

[{u'body': u'this is the message body', u'user_id': u'8', u'name': u'Mark', u'time': u'2013-10-10-16:32'}]

3 个答案:

答案 0 :(得分:3)

那不是JSON。当你去找为什么它没有输出JSON时,你可以使用ast.literal_eval()

>>> ast.literal_eval('''[{u'body': u'this is the message body', u'user_id': u'8', u'name': u'Mark', u'time': u'2013-10-10-16:32'}]''')
[{u'body': u'this is the message body', u'user_id': u'8', u'name': u'Mark', u'time': u'2013-10-10-16:32'}]

答案 1 :(得分:0)

http://jsonlint.com/

发出此错误

Parse error on line 2:
[    {        u'body': u'thisisthe
--------------^
Expecting 'STRING', '}'

你需要摆脱'你'

答案 2 :(得分:0)

因此它无法工作的原因是因为我在保存之前忘记将文本编码回json(保存的内容只是对象的python表示)。但无论如何,我最终都使用了jsonfield。它会自动将您的对象转换为json并保存它们。