ipad应用程序将此json发送给我,我通过request.POST.get读取它,然后通过 ast.literal_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
我真的很感谢你的帮助
答案 0 :(得分:0)
尝试添加\' \' \'在字符串的开头和结尾处。
像这样:
u'\'\'\'[\n ... bla bla bla...]\'\'\''
答案 1 :(得分: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数据。
JSON中的null
在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
}