当前位置: 首页 > 面试题库 >

如何将JSON文件导入PostgreSQL?

朱雅惠
2023-03-14
问题内容

例如,我有一个文件customers.json,它是一个对象数组(严格地形成),它很简单(没有嵌套的对象),就像这样(重要的是:它已经包含了id):

[
  {
    "id": 23635,
    "name": "Jerry Green",
    "comment": "Imported from facebook."
  },
  {
    "id": 23636,
    "name": "John Wayne",
    "comment": "Imported from facebook."
  }
]

我想将它们全部导入到表的postgres db中customers

当我将其作为json类型的列导入到像这样的表中imported_jsondata用其中列出的对象命名的列,然后使用sql获取这些值并将其插入到真实表中时,我发现了一些非常困难的方法。

但是有没有一种简单的方法就可以将json导入到postgres中而又不涉及sql?


问题答案:

您可以将JSON输入到SQL语句中,以提取信息并将其插入表中。如果JSON属性的名称与表列的名称完全相同,则可以执行以下操作:

with customer_json (doc) as (
   values 
    ('[
      {
        "id": 23635,
        "name": "Jerry Green",
        "comment": "Imported from facebook."
      },
      {
        "id": 23636,
        "name": "John Wayne",
        "comment": "Imported from facebook."
      }
    ]'::json)
)
insert into customer (id, name, comment)
select p.*
from customer_json l
  cross join lateral json_populate_recordset(null::customer, doc) as p
on conflict (id) do update 
  set name = excluded.name, 
      comment = excluded.comment;

将插入新客户,将更新现有客户。“魔术”部分是,json_populate_recordset(null::customer, doc)它生成JSON对象的关系表示。

上面假设一个表定义是这样的:

create table customer 
(
  id        integer primary key,
  name      text not null,
  comment   text
);

如果数据以文件形式提供,则需要首先将该文件放入数据库中的某个表中。像这样:

create unlogged table customer_import (doc json);

然后将文件上传到该表的单行中,例如使用中的\copy命令psql(或SQL客户端提供的任何命令):

\copy customer_import from 'customers.json' ....

然后,您可以使用上面的语句,只需删除CTE并使用登台表:

insert into customer (id, name, comment)
select p.*
from customer_import l
  cross join lateral json_populate_recordset(null::customer, doc) as p
on conflict (id) do update 
  set name = excluded.name, 
      comment = excluded.comment;


 类似资料:
  • 问题内容: 我正在使用Angular Maps构建地图应用程序,并希望导入JSON文件作为定义位置的标记列表。我希望将此JSON文件用作app.component.ts中的marker []数组。而不是在TypeScript文件中定义标记的硬编码数组。 导入此JSON文件以在我的项目中使用的最佳过程是什么?任何方向都非常感谢! 问题答案: 直到最近的打字稿更新之前,Aonepathan的单行代码都

  • 问题内容: 更新资料 无需导入。相反,我需要添加对文件顶部的引用。所以我的WebAPI.js的第一行应该是 我正在尝试导入jQuery以在Typescript文件中使用,但是我尝试的所有操作都收到各种错误。我在这里和这里都遵循了解决方案,但是没有任何运气。 tsconfig.json WebAPI.js 我也尝试过 失误 问题答案: 不需要导入。而是在文件顶部添加对Typescript定义文件的引

  • 我目前正在使用Firebase实时数据库。我已经将JSON导入实时数据库,但由于查询的限制,我需要打开Firebase Firestore。 我想将JSON导入Firebase的云Firestore。

  • 我想在括号中创建一个json文件,只存储一个有200个元素的数组,我想能够将该文件导入到我的“main.js”文件中,并且能够使用它,即使数组本身已经不在“main.js”了。 我该怎么做?

  • 问题内容: 如何在Ecmascript 6中访问json文件?以下无效: 如果我尝试导入JavaScript文件,则效果很好。 问题答案: 一个简单的解决方法: config.js 然后… 不允许导入现有的.json文件,但可以完成工作。

  • 如何访问ECMAScript 6中的JSON文件? 以下操作不起作用: 如果我尝试导入一个JavaScript文件,这很好。