我已经四处搜索了,我所知道的是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'}]
答案 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)
发出此错误
Parse error on line 2:
[ { u'body': u'thisisthe
--------------^
Expecting 'STRING', '}'
你需要摆脱'你'
答案 2 :(得分:0)
因此它无法工作的原因是因为我在保存之前忘记将文本编码回json(保存的内容只是对象的python表示)。但无论如何,我最终都使用了jsonfield。它会自动将您的对象转换为json并保存它们。