我正在使用熊猫,并将数据导出为 json,如下所示:
import pandas as pd
df = pd.DataFrame({'a': ['Têst']})
df.to_json(orient='records', lines=True)
> u'{"a":"T\\u00east"}'
这是有道理的,因为我们有一个00ea前缀为 的 Unicode 字符,\u并且\在转换为 JSON 时会转义为
但是然后我将 JSON 字符串导入到 Postgres 中 COPY
buffer = cStringIO.StringIO()
buffer.write(df.to_json(orient='records', lines=True))
buffer.seek(0)
with connection.cursor() as cursor:
cursor.copy_expert(sql="""
COPY tmp (json_data) FROM STDIN WITH NULL AS '' ENCODING 'UTF8';
""", file=buffer)
问题是数据库中的结果最终是
{"a": "Tu00east"}
正如你所看到的那样,双人\\消失了。
我尝试使用CSVCOPY 模式,但由于某些数据中有逗号,因此将事情搞砸了,并且尝试将 ESCAPE 字符和 DELIMITER 设置为其他内容似乎总是会导致失败。
表列有一个jsonb类型。我在文档中读到 PG 不喜欢 \x003f 上的非 ASCII Unicode,除非 DB 编码是 UTF8,在我的情况下,这应该不是问题。
我想弄清楚为什么这里要删除转义字符,以及如何导入 Postgres 并保存编码。
PIPIONE
相关分类