我试图将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...
是否还有其他需要转义的字符?
答案 0 :(得分:1)
因为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;