表定义是:
chat_id serial primary key, last_update timestamp, messages JSON[]
我要插入这样的记录:
insert into chats (messages) values ('{{"sender":"pablo","body":"they are on to us"}}');
有错误:
错误:格式错误的数组文字:“{{”sender“:”pablo“,”body“:”他们对我们说“}}” 第1行:插入聊天(消息)值('{{“sender”:“pablo”,“bo ...
我也试过这种方法:
insert into chats (messages) values (ARRAY('{"sender":"pablo","body":"they are on to us"}'));
请注意,更新行并使用array_append插入工作正常。
答案 0 :(得分:5)
我认为这是以{
开头的JSON表示法与Postgres中的短手数组表示法之间的冲突,其中数组的字符串表示形式也表示为{{ 1}}。
以下作品:
{
这通过使用显式数组构造函数避免了insert into chats
(messages)
values
(array['{"sender":"pablo","body":"they are on to us"}']::json[]);
的歧义。
要使数组成为json数组,您需要将字符串转换为{{
或将结果数组转换为json
(请参阅上面的示例)。如果在该行中有多个JSON文档,则转换整个数组会更容易:
json[]
或者:
insert into chats
(messages)
values
(array['{"sender":"pablo","body":"they are on to us"}',
{"sender":"arthur"}']::json[]);
答案 1 :(得分:0)
逃避特殊字符非常复杂。我会使用insert from select来使它更容易。
下面的选择部分。
WITH bu AS (SELECT json_array_elements('[{"name":"obj1"},{"name":"obj2"},{"name":"obj3"},{"name":"obj4"}]'::json) AS bu)
SELECT array_agg(bu) FROM bu;