将格式化json加载到postgreSQL表
我想加载一个格式化的JSON文件,格式为将格式化json加载到postgreSQL表,json,postgresql,Json,Postgresql,我想加载一个格式化的JSON文件,格式为 { "EId":"104111", "Category":"(0)", "Mac":"ABV", "Path":"chemin2", "ID":"System.Byte" } 通过首先创建一个带有json列的临时表 create temporary table temp_json (values json); copy temp_json from '/path_to_the_file/test.json'; select values->
{
"EId":"104111",
"Category":"(0)",
"Mac":"ABV",
"Path":"chemin2",
"ID":"System.Byte"
}
通过首先创建一个带有json列的临时表
create temporary table temp_json (values json);
copy temp_json from '/path_to_the_file/test.json';
select values->>'EId' as EId,
values->>'Category' as Category,
values->>'Mac' as Mac,
values->>'Path' as Path,
values->>'ID' as ID
from(
select json_array_elements(values) as values
from temp_json
) a;
但它显示了以下信息:
错误:JSON类型的输入语法无效
详细信息:输入字符串意外结束。
上下文:JSON数据,第1行:{
复制临时json,第1行,列值:“{”
一旦我删除了所有的空白,指令就会毫无错误地通过。我认为您引用的内容不正确。请参阅,和上的文档 当然有可能
CREATE TEMPORARY TABLE foo
AS
SELECT $${
"EId":"104111",
"Category":"(0)",
"Mac":"ABV",
"Path":"chemin2",
"ID":"System.Byte"
}$$::jsonb AS jsondata;
假设文件如下所示:
{
"EId":"104111",
"Category":"(0)",
"Mac":"ABV",
"Path":"chemin2",
"ID":"System.Byte"
}
{
"EId":"104112",
"Category":"(1)",
"Mac":"CBV",
"Path":"chemin3",
"ID":"System.Byte"
}
临时表将接收文本而不是json:
create temporary table temp_json (values text);
\copy temp_json from '/path_to/input.json';
最终表将有一个json列:
create table t (obj jsonb);
一些字符串操作:
insert into t (obj)
select
regexp_split_to_table(
replace(v, $$"}{"$$, $$"}djue748wBc,l;09{"$$),
'djue748wBc,l;09'
)::jsonb
from (
select string_agg(values, '') as v
from temp_json
) s;
obj
--------------------------------------------------------------------------------------------
{"ID": "System.Byte", "EId": "104111", "Mac": "ABV", "Path": "chemin2", "Category": "(0)"}
{"ID": "System.Byte", "EId": "104112", "Mac": "CBV", "Path": "chemin3", "Category": "(1)"}
请回答您的问题并添加您正在使用的确切SQL语句。整个对象需要在file@ClodoaldoNeto谢谢,我知道这些信息,但有办法解决。这意味着在文件中加载经过解析的格式化json数据吗?你的“json文件”包含一个JSON记录,还是希望它生成多行?非常感谢,您的解决方案正在工作,尽管我似乎不知道(replace(v,$$“}{$$,$$”}djue748wBc,l;09{“$$”,'djue748wBc,l;09')有什么作用?@ponach有必要引入一个随机字符串来拆分对象。