You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

向Hasura插入JSON对象数组报malformed array literal错误如何解决

错误原因

malformed array literal: "[]"是PostgreSQL抛出的类型不匹配错误,核心问题是你传入的值和列定义的类型不兼容:

  • 如果你对应列的类型是PostgreSQL原生数组类型(比如text[]、jsonb[]),这类列不接收JSON序列化后的字符串格式的值,你用JSON.stringify转换后的"[]"字符串不符合PostgreSQL原生数组的字面量规则,因此触发报错。
  • 如果你对应列的类型是json/jsonb,只有当你设置了额外的列校验规则要求输入为数组时,才有可能触发该错误,这种情况概率较低。
表结构参考

Table Columns

解决方案

方案1:列保持原生数组类型

删除客户端的JSON.stringify序列化逻辑,直接将原始JS数组作为mutation参数传入即可,Hasura会自动将JS数组转换为PostgreSQL可识别的数组格式。
参考mutation调用示例:

mutation InsertData($my_array_col: jsonb[]!) {
  insert_your_table_name(objects: {my_array_col: $my_array_col}) {
    returning {
      id
    }
  }
}

客户端传参时直接传入[{...}, {...}]格式的原始数组即可,无需序列化。

方案2:修改列类型为jsonb

如果你的数组存储的是结构不固定的对象,更推荐使用jsonb类型存储:

  1. 在Hasura控制台将对应列的类型修改为jsonb
  2. 可以保留JSON.stringify序列化逻辑,也可以直接传入原始JS数组,Hasura对jsonb类型的列兼容两种输入格式,都会自动完成存储。

内容的提问来源于stack exchange,提问作者Natnael

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 02:36:07