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

求助:解决GridDB WebAPI插入数据时的'Mapping JSON data error at field 'rows''错误

求助:解决GridDB WebAPI插入数据时的'Mapping JSON data error at field 'rows''错误

我正在开发一个基于Node.js和GridDB Cloud WebAPI的智能能源监控应用,尝试往名为energy_data的容器中插入数据时,始终收到400 Bad Request错误,提示Mapping JSON data error at field 'rows'。运行node insertData.js后得到的具体错误信息如下:

❌ Error inserting data:
Status : 400
Status Text : Bad Request
Error Code : N/A
Error Message: Mapping JSON data error at field 'rows'
Full Data : {
  "version": "v2",
  "errorCode": 0,
  "errorMessage": "Mapping JSON data error at field 'rows'"
}
Stack Trace: AxiosError: Request failed with status code 400
...(省略后续栈信息)

我已经尝试过的操作

  • 成功创建了energy_data容器,Schema为:timestamp:TIMESTAMP(行键)、value:DOUBLE、device_id:STRING
  • 编写了insertData.js代码,使用Axios发送POST请求,Payload结构为包含多行数据的数组
  • 尝试过用ISO字符串和原始Date对象传递timestamp字段,确认容器存在且字段名、类型完全匹配

环境信息

  • 系统:Ubuntu 20.04.6 LTS (WSL2 on Windows 10 Pro)
  • Node.js版本:v20.x
  • Axios版本:1.6
  • GridDB Cloud WebAPI版本:v2

解决方案(基于GridDB WebAPI使用经验)

我之前在使用GridDB WebAPI v2时也遇到过几乎一模一样的错误,这个问题大多是数据类型映射不兼容或者Payload格式不符合官方要求导致的,你可以按照下面的步骤一步步排查修复:

1. 把TIMESTAMP字段从ISO字符串改为毫秒级时间戳数值

GridDB WebAPI对TIMESTAMP类型的数值格式支持更稳定,使用毫秒时间戳(而非ISO字符串)可以避免字符串解析的兼容性问题。修改你的Payload代码:

const payload = {
  rows: [
    // 用Date.now()直接生成毫秒时间戳
    [Date.now(), 12.5, "device_001"],
    [Date.now() + 60000, 18.2, "device_002"]
  ]
};

2. 严格匹配容器列顺序与Payload行元素顺序

GridDB的位置式数组格式(数组的数组)对顺序要求极高,必须保证Payload中每个行数组的元素顺序和容器创建时的列顺序完全一致:

  • 确认你的容器Schema列顺序是timestamp → value → device_id
  • 如果容器列顺序不同(比如timestamp → device_id → value),需要调整Payload中元素的顺序,否则会出现类型映射错误

3. 验证请求凭证和URL的正确性

虽然你已经成功创建了容器,但可以通过简单的GET请求验证凭证和URL是否有效:

// 新增一段测试代码,获取容器元数据
axios.get(`${baseURL}/containers/energy_data`, {
  headers: {
    'Authorization': authHeader
  }
})
.then(res => console.log("容器元数据:", res.data))
.catch(err => console.error("获取容器元数据失败:", err));

如果能正常返回容器的Schema信息,说明凭证和URL是正确的;如果失败,需要检查Basic Auth凭证或URL中的集群/数据库名称是否有误。

4. 用Curl测试排除Node.js/Axios的问题

如果上述修改后仍然报错,可以用Curl直接发送请求,排除Node.js或Axios的自动转换问题:

curl -X POST "https://xxxxxxx.griddb.com:xxxx/griddb/v2/gs_clustxxxxxx7/dbs/xxxxxxx/containers/energy_data/rows" \
  -H "Content-Type: application/json" \
  -H "Authorization: Basic xxxxxxxxM0wxei1hZG1pbjxxxxxxxxx=" \
  -d '{
    "rows": [
      [1716203645000, 12.5, "device_001"],
      [1716203705000, 18.2, "device_002"]
    ]
  }'

如果Curl请求成功,说明是Node.js代码的问题(比如Axios的配置);如果Curl也报错,需要进一步检查GridDB容器的Schema或权限配置。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.07 11:34:32