2013-10-11 97 views
1

我搜索了周圍,我知道的是,不知何故JSON被損壞。 我在字典列表上調用json.dumps,然後將其保存到django模型對象中。當我嘗試通過調用json.loads來讀取它時,我得到拋出的Expecting property name: line 1 column 2 (char 2)異常。python,json.loads期待的屬性名稱:第1行第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

這不是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'}] 
0

http://jsonlint.com/

給這個錯誤

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

你需要擺脫的 'U'

0

所以它不工作的原因是因爲我忘記文字編碼回JSON之前,我救了它(什麼是被保存僅僅是對象的蟒蛇表示)。但是我最終無論如何都使用了jsonfield。它會自動將您的對象轉換爲json並保存它們。

相關問題