如何将 javascript 对象转换为 Postgres 中的结构化 jsonb?

How do I convert a javascript object to structured jsonb in Postgres?

如果我的应用程序层中有一个像这样的普通 js 对象:

{ name: 'amit', age: 44, likes: ['some', 'things']}

我会在上面做一个 JSON.stringify 得到:

"{"name":"amit","age":44,"likes":["some","things"]}"

但我想在我的 postgres 数据库中的 sql 中执行此操作,它有一个 jsonb 列。

我试过使用像 to_json 这样的函数(失败了),也试过像这样转换这个对象:

SELECT '{ name: 'amit', age: 44, likes: ['some', 'things']}'::jsonb

但这给了我一个错误:

ERROR: ERROR:  syntax error at or near "', age: 44, likes: ['"
LINE 8: SELECT '{ name: 'amit', age: 44, likes: ['some', 'things']}'.

如何将此对象转换为可以存储在我的 table 的 jsonb 列中的结构化 jsonb 对象?

你的语法有误:)。 Postgres 不是 JavaScript。 Postgres json 语法更接近于 Python 的字典(需要引用键)。对键和字符串值使用双引号而不是单引号。然后使用 ::jsonb 将其转换为正确的 jsonb 格式。

JSON.stringify 就可以了,我不知道为什么你的 select 是错误的。

您的 select 应该是:

SELECT '{ "name": "amit", "age": 44, "likes": ["some", "things"]}'::jsonb;

console.log(JSON.stringify({ name: 'amit', age: 44, likes: ['some', 'things']}));