微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何插入Postgresql JSON数组

表定义是:

chat_id serial primary key,last_update timestamp,messages JSON[]

我想插入这样的记录:

insert into chats (messages) values ('{{"sender":"pablo","body":"they are on to us"}}');

错误

ERROR: malformed array literal: “{{“sender”:”pablo”,”body”:”they are on to us”}}”
LINE 1: insert into chats (messages) values (‘{{“sender”:”pablo”,”bo…

我也试过这种方法

insert into chats (messages) values (ARRAY('{"sender":"pablo","body":"they are on to us"}'));

请注意,更新行并使用array_append插入工作正常.

解决方法

我认为这是JSON符号之间的冲突,它以{和Postgres中的短手数组符号开头,其中数组的字符串表示也用{表示.

以下作品:

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[]);

或者:

insert into chats 
  (messages) 
values 
  (array['{"sender":"pablo","body":"they are on to us"}'::json,{"sender":"arthur"}'::json]);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐