【问题标题】:Array of Json into rows + postgresql + node.jsJson 数组成行 + postgresql + node.js
【发布时间】:2018-01-02 16:11:40
【问题描述】:

假设我有一个 json 数组,如下所示

[
{"a":1,"b":2},{"a":3,"b":4} ,{"a":5,"b":6}
]

我必须将它插入到 postgtreSQL 中,如下所示:

in  out
1  2
3  4
5  6

我在 postgreSQL 中阅读了有关 JSON 数据类型的信息,但我不知道如何实现这一点。请分享你的想法。提前致谢。

【问题讨论】:

  • 你想要 'a', 'b' 作为列名吗?
  • 你想用'a'映射'in',用'b'映射'out'?
  • 你能告诉我,JSON 数据是从哪里来的吗?或者它总是'a'和'b'作为键?
  • 你试过使用 JSON 解析器吗?
  • @sForSujit JSON 解析器用于解析 JSON,但我的问题是如何将这个 JSON 数组转换为 postgresql 中的行。

标签: json node.js postgresql


【解决方案1】:
insert into my_table (in, out)
select a, b
from jsonb_to_recordset(
    '[{"a":1,"b":2},{"a":3,"b":4} ,{"a":5,"b":6}]'
) r (a int, b int)

https://www.postgresql.org/docs/current/static/functions-json.html#FUNCTIONS-JSON-PROCESSING-TABLE

在 Javascript 中转义单引号:

var query = 'insert into table (enroll_id, time) select enroll_id, time from jsonb_to_recordset(\'' + data + '\') r (enroll_id bigserial, time timestamp)';

【讨论】:

  • 谢谢.. 但是如果我构造一个像 var query = 'insert into table (enroll_id, time) select EnrollNumber, time from jsonb_to_recordset( '+data+') r (enroll_id bigserial, time timestamp)'; 这样的查询,这里的数据是 json 数组,但它不是一个有效的查询。我该如何纠正这个问题??
  • @Subburaj 转义单引号。
  • { error: column "enrollnumber" does not exist 抛出错误
  • @Subburaj select enroll_id
  • 根据你的查询 select enroll_id, time from jsonb_to_recordset 但在 JSON 中我们拥有的关键是 EnrollNumber 然后它将如何从 JSON 集中选择enroll_id ..
猜你喜欢
  • 2015-08-04
  • 2020-08-15
  • 2017-07-12
  • 2011-11-10
  • 1970-01-01
  • 1970-01-01
  • 2012-08-08
  • 1970-01-01
  • 2021-09-10
相关资源
最近更新 更多