我正在尝试将JSON文件导入表中。我正在使用这里提到的解决方案:https : //stackoverflow.com/a/33130304/1663462:
create temporary table temp_json (values text) on commit drop;
copy temp_json from 'data.json';
select
values->>'annotations' as annotationstext
from (
select json_array_elements(replace(values,'\','\\')::json) as values
from temp_json
) a;
Json文件的内容是:
{"annotations": "<?xml version=\"1.0\"?>"}
我已验证这是有效的JSON文件。
json文件包含一个\"
我认为对以下错误负责的文件:
CREATE TABLE
COPY 1
psql:insertJson2.sql:13: ERROR: invalid input syntax for type json
DETAIL: Expected "," or "}", but found "1.0".
CONTEXT: JSON data, line 1: {"annotations": "<?xml version="1.0...
是否还有其他需要转义的字符?
由于copy
命令进程使用文本格式的转义('\')字符而没有任何选项,因此有两种导入此类数据的方法。
1)使用外部实用程序通过处理文件copy ... from program
,例如使用sed
:
copy temp_json from program 'sed -e ''s/\\/\\\\/g'' data.json';
它将所有反斜杠替换为加倍的反斜杠,并通过将其转换回单斜杠copy
。
2)使用csv
导入:
copy temp_json from 'data.json' with (format csv, quote '|', delimiter E'\t');
在这里,您应该设置quote
和delimiter
字符,使其不会出现在文件中的任何位置。
然后使用直接转换:
select values::json->>'annotations' as annotationstext from temp_json;
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句