使用 crate 的 HTTP API 插入对象数组:错误 4003



我试图使用Crate的2.1.8 HTTP端点插入一行,但系统性失败,出现错误4003:我的表包含一列,该列是一个对象数组,它失败,返回错误4003:"SQLActionException[ColumnValidationException:arr的验证失败:不能将'[{\"t\":1},{\"z\":\"foo\"}]'强制转换为类型object_array]">

以下是表创建:如果不存在,则创建表"doc"。"测试"("arr"阵列(对象(动态)),"name"字符串)

现在是我的json:

{"stmt":"INSERT INTO\"test\"(\"name\",\"arr\")VALUES(?,?)","args":["test","[{\"t\":1},{\"z\":\"foo\"}]"]}

以及我发布请求的命令:wget--header"Content Type:application/json"--post file query_test.json-O-'http://localhost:4200/_sql?types&error_trace=true'

结果是:4003:"SQLActionException[ColumnValidationException:arr的验证失败:不能将'[{\"t\":1},{\"z\":\"foo\"}]'强制转换为类型object_array]">

如果我从web控制台运行此操作:INSERT INTO"test"("name","arr")VALUES('test',[{"t"=1},{"z"='fo'}]);它运行良好。。。知道我做错了什么吗?

只需移除数组参数值周围的引号,不要转义数组中的引号,如:

{"stmt":"INSERT INTO "test" ("name","arr") VALUES (?,?)", "args":["test", [{"t":1}, {"z":"foo"}]]}

否则它是一个JSON字符串值,而不是数组,CrateDB也会将其解释为字符串。

相关内容

  • 没有找到相关文章

最新更新