2013-04-25 53 views
0

一個iPad應用程序發送此JSON對我和我的request.POST.get讀它,然後通過ast.literal_eval收杆它換行符導致語法錯誤:EOL同時掃描字符串字面

u'[\n {\n "type" : 2,\n "dateCreated" : "Wed, 24 Apr 2013 17:20:50 0100",\n "dateStart" : "Wed, 24 Apr 2013 18:00:00 0100",\n "appointmentId" : 0,\n "withP" : [\n\n ],\n "seenTime" : null,\n "ofCWithId" : 2,\n "ofClientWithId" : 68,\n "dateEnd" : "Wed, 24 Apr 2013 19:00:00 0100",\n "comments" : "Test test test\n.\n() \'\' test \'\' \' test \'\n",\n "inLocation" : null,\n ...bla bla bla...]' 

我得到這個錯誤:

'comments' : 'Test test test 
          ^
SyntaxError: EOL while scanning string literal 

我可以理解,換行符是問題,但我不知道如何解決它。我使用Django 1.4.2蟒蛇2.7.3

我真的很感謝你的幫助

+1

又是怎樣產生這種文字?解決此問題的唯一方法是從引用字符串中刪除換行符,但基本上需要您從頭開始編寫解析器。 – 2013-04-25 14:48:48

+0

另外你的最後一個單詞不會被引用,所以這也會給你一個SyntaxError。 – 2013-04-25 14:50:25

+0

一個ipad應用程序發送這個json給我,我通過request.POST.get讀取它,然後通過ast.literal_eval進行分析。由於測試測試測試導致問題後,錯誤消息顯示新行。 – Marjan 2013-04-25 15:18:24

回答

0

嘗試添加\「\」 \」在字符串的開頭和結尾。

像這樣:

u'\'\'\'[\n ... bla bla bla...]\'\'\'' 
0

不應使用ast.literal_eval閱讀JSON。閱讀JSON有一個單獨的module called json

使用它負載JSON數據:

import json 
data = """{"type":null,"dateCreated":"Wed, 24 Apr 2013 17:20:50 0100"}""" 
json_data = json.loads(data) 

ast.literal_eval是爲了評價其被表示爲一個字符串Python代碼。它沒有設計用於處理JSON數據。 null在JSON中是Python Dictionary中的None,作爲區別的一個例子。

您收到錯誤的另一個原因是因爲JSON您試圖解析無效。它看起來像是服務器端問題,或者從服務器獲取JSON數據的方式存在問題。

換行符號(\n)應該在字符串中轉義。根據JSON specs'不應該被轉義。或者,您可以使用strict=False參數與json.loads來允許控制字符串內的字符。

從你的例子

有效的JSON應該是這樣的:

{ 
    "type": 2, 
    "dateCreated": "Wed, 24 Apr 2013 17:20:50 0100", 
    "dateStart": "Wed, 24 Apr 2013 18:00:00 0100", 
    "appointmentId": 0, 
    "withP": ["\\n\\n"], 
    "seenTime": null, 
    "ofCWithId": 2, 
    "ofClientWithId": 68, 
    "dateEnd": "Wed, 24 Apr 2013 19:00:00 0100", 
    "comments": "Test test test\\n.\\n() '' test '' ' test '\\n", 
    "inLocation": null 
}