Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将格式化json加载到postgreSQL表_Json_Postgresql - Fatal编程技术网

将格式化json加载到postgreSQL表

将格式化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->

我想加载一个格式化的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' 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有必要引入一个随机字符串来拆分对象。