我有一个从 phpmyadmin 导出的 json 文件,它看起来像这样(utf-8 文件):
[{"user_email": "bh549@sina.cn","followee_id": 1411833182,"create_date": "cdatetime datetime p1 (S\'\\x07\\xdb\\x06\\x13\\x16\\x08(\\r\\xd5\\xcc\' tRp2 ."}, {"user_email": "zaici4@sina.cn","followee_id": 1296426000,"create_date": "cdatetime datetime p1 (S\'\\x07\\xdb\\x07\\x14\\x179\\x16\\x02 \\x08\' tRp2 ."}, {"user_email": "yanaa357@sina.com","followee_id": 1848085255,"create_date": "cdatetime datetime p1 (S\'\\x07\\xdb\\x08\\x13\\x17\\x10\\x0f\\x05\\x1c\\x02\' tRp2 ."}]
每个 dict 是数据库中的一行,每行中的第三个值是一个 cpickled 字符串。
然后我使用表单将此文件上传到 python 脚本(使用 post 方法)。
然后在 python 脚本中解析这个文件,如下所示:
import cgi, os
import cgitb; cgitb.enable()
import json
#import simplejson as json
print "Content-type: text/html\n\n"
try:
import msvcrt
msvcrt.setmode (0, os.O_BINARY) # stdin = 0
msvcrt.setmode (1, os.O_BINARY) # stdout = 1
except ImportError:
pass
form = cgi.FieldStorage()
file_content = form['mysql_table'].value
file_content = json.loads(file_content)
然后浏览器在执行 json.loads 时打印一个值错误:
<type 'exceptions.ValueError'>: Invalid control character at: line 1 column 83 (char 83)
char 83 是第一行第三个值中的空格。
如何解决这个问题?
不管怎样,谢谢mhawke。但是你说的第一个问题不存在。没有 \n 因为我从打印结果中复制了它,在我导出的 json 文件中,它实际上有 \n
{"user_email": "bh549@sina.cn","followee_id": 1411833182,"create_date": "cdatetime
datetime
p1
(S\'\\x07\\xdb\\x06\\x13\\x16\\x08(\\r\\xd5\\xcc\'
tRp2
."}, {"user_email": "zaici4@sina.cn","followee_id": 1296426000,"create_date": "cdatetime
datetime
p1
(S\'\\x07\\xdb\\x07\\x14\\x179\\x16\\x02 \\x08\'
tRp2
."}
我是不是误会了?第二个问题,是phpmyadmin在导出时转义了文件,那你说的问题怎么解决?
slouton:我正在编写一个 python 脚本来导出表并转换腌制数据。它现在工作了,现在似乎是用腌制数据处理 json 的方法。