Python 换行符在扫描字符串文字时导致SyntaxError:EOL

Python 换行符在扫描字符串文字时导致SyntaxError:EOL,python,django,python-2.7,newline,Python,Django,Python 2.7,Newline,一个ipad应用程序将这个json发送给我,我通过request.POST.get读取它,然后通过ast.literal\u eval 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" :

一个ipad应用程序将这个json发送给我,我通过request.POST.get读取它,然后通过ast.literal\u eval

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 python 2.7.3


非常感谢您的帮助

请尝试在字符串的开头和结尾添加\'\'

像这样:

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

不应使用ast.literal\u eval读取JSON。对于读取JSON,有一个单独的方法

使用它加载JSON数据:

literal_eval用于评估表示为字符串的Python代码。它不是为处理JSON数据而设计的。 JSON中的
null
在Python字典中是
None
,这是一个差异示例

出现错误的另一个原因是您尝试解析的JSON无效。看起来服务器端出现了问题,或者从服务器获取JSON数据的方式出现了问题

换行符(
\n
)应在字符串中转义。另外,
也不应该被转义,根据。或者,您可以将
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
}

这个文本是如何生成的?解决此问题的唯一方法是从带引号的字符串中删除换行符,但这基本上需要你从头开始编写解析器。而且你的最后一个单词没有被引用,这也会给你带来一个语法错误。一个ipad应用程序将这个json发送给我,我通过request.POST.get读取它,然后通过ast.literal\u eval对它进行pars。由于错误消息显示测试后换行导致了问题。既然这应该是JSON,为什么不使用
JSON
库对其进行解析?@DanielRoseman我将其更改为JSON.loads,它解决了问题,谢谢。这也适用于JSON.loads
{
    "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
}