2013-04-25 51 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 
}