JSON数组分为列

时间:2019-02-20 04:38:22

标签: sql json postgresql

我刚接触PSQL(请在此处发布),所以请耐心等待。

我正在尝试获取JSON数组:

[{
"id": 10259,
"cuisine": "greek",
"ingredients": [
  "romaine lettuce", "black olives",
  "grape tomatoes",
  "garlic",
  "pepper",
  "purple onion",
  "seasoning",
  "garbanzo beans",
  "feta cheese crumbles"
]}, ....

变成这样:

id | Cuisine | Ingredients |....
----------------------------
   |        |              |....

在这些列中填充以上各项的位置。 我进行了一些搜索,this最接近我希望达到的目标。我的问题是:

  • 格式不一样
  • 我大约有5万个输入
  • 我将数据类型设置为JSON,而不是TEXT(但根据我的理解,有什么区别吗?)

我编写了一个Python脚本,并提供了更多教程帮助,以将JSON数据所在的数据库连接到PSQL数据库,但是显然未安装正确的模块(我没有构建PSQL数据库)。所以,我在这里。

非常感谢任何建议或技巧。

谢谢。

2/21/19编辑

我不知道是否允许这样做,但我进行了更多研究(谢谢u / Vaibhav Kaushal)

对于那些遇到与我相同的问题的人:

CREATE TABLE ctest0 (id integer not null primary key, cuisine text, ingredients text);
insert into ctest0 (id, cuisine, ingredients) select * from json_populate_recordset(null::ctest0,'[{
"id": 10259,
"cuisine": "greek",
"ingredients": [
  "romaine lettuce",
  "black olives",
  "grape tomatoes",
  "garlic",
  "pepper",
  "purple onion",
  "seasoning",
  "garbanzo beans",
  "feta cheese crumbles"
]}]');

如果您执行select * from ctest0,则可以看到表的内容。

结果:

` id   | cuisine |         ingredients
-------+---------+------------------------------
  10259 | greek   | [                           +
      |         |       "romaine lettuce",    +
   |         |       "black olives",       +
   |         |       "grape tomatoes",     +
   |         |       "garlic",             +
   |         |       "pepper",             +
   |         |       "purple onion",       +
   |         |       "seasoning",          +
   |         |       "garbanzo beans",     +
   |         |       "feta cheese crumbles"+
   |         |     ]`

从我的研究中,我了解到您还可以执行json_to_recordset(如果您有像我这样的数组,则可以执行json_to_recordset),可以动态创建表格(?)

重要的是要注意:

  • '*'表示 all
  • 当您使用INSERT将数据存储到表中时,可以指定要插入的所有列( duh ,但是当我遇到第一个错误时,我花了几秒钟来意识到问题)

以下是一些我认为有用的链接:

https://www.postgresql.org/docs/9.5/functions-json.html

How to get a json object as column in postgresql?

How do I define a record type for JSON in postgres

What data type to choose json or jsonb or text

如果我找到更多,我会更新。

0 个答案:

没有答案