【问题标题】:Postgres & Javascript - How to format object array in Nodejs to be inserted into Postgres JSON column?Postgres & Javascript - 如何在 Nodejs 中格式化对象数组以插入 Postgres JSON 列?
【发布时间】:2021-02-26 14:45:36
【问题描述】:

我在 Javascript 中有一个对象数组:

const testArray = [{name: 'John', date: '2017-03-15'}, {name: 'Bob', date: '2018-04-29'}];

在 nodejs 中,我正在运行一个 UPDATE 语句,该语句将发送到我的 Postgres 数据库。我需要将上述对象数组插入到 Postgres 中的 JSON 数组列中。它需要如下所示:

UPDATE persons
SET info = (array['{"name": "John", "date": "2017-03-15"}', '{"name": "John", "date": "2018-04-29"}']::json[])
WHERE id = 1;

问题是我无法让它看起来像那样。当我尝试在 nodejs 中执行以下操作时:

UPDATE persons
SET info = (array[ ${ testArray } ]::json[])
WHERE id = 1;

它在运行时最终看起来像这样:

UPDATE persons
SET info = (array[[object Object],[object Object]]::json[])
WHERE id = 1;

如果我尝试像这样使用JSON.stringify()

UPDATE persons
SET info = (array[ ${JSON.stringify(testArray) } ]::json[])
WHERE id = 1;

运行时是这样的:

UPDATE persons
SET info = (array[{"name": "John", "date": "2017-03-15"}, {"name": "John", "date": "2018-04-29"}]::json[])
WHERE id = 1;

哪个更接近 - 它只是缺少需要围绕每个对象的单引号。

如何正确格式化 nodejs 中的数组以便 Postgres 接受它?

【问题讨论】:

  • 您是否尝试过使用JSON.stringify
  • 是的,我做到了,但它仍然不起作用(尽管它更接近正确)。查看我的编辑结果。
  • 您使用的是哪个 postgres 客户端库?
  • 我正在使用 node-postgres

标签: javascript sql node.js postgresql


【解决方案1】:

好的,我想通了。首先对您的对象数组执行以下操作:

const formatArray = finalArray.map(object => `'${JSON.stringify(object)}'`);

现在你可以这样做了:

UPDATE persons
SET info = (array[ ${ formatArray } ]::json[])
WHERE id = 1;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多