1

我正在尝试使用 Crate 的 2.1.8 HTTP 端点插入一行,但它系统地失败并出现错误 4003:我的表包含一个作为对象数组的列,它失败并出现错误 4003:“SQLActionException[ColumnValidationException: Validation failed for arr : '[{\“t\“:1}, {\“z\“:\“foo\“}]' 不能转换为object_array]”</p>

这是表创建: CREATE TABLE IF NOT EXISTS “doc”.“test” ( “arr” ARRAY(OBJECT (DYNAMIC)), “name” STRING )

现在这是我的 json :

{“stmt”:“插入\“test\”(\“name\”,\“arr\“)值(?,?)“,“args”:[“test”,“[{\“t\ “:1}, {\“z\”:\“foo\“}]“]}

和我发布请求的命令: wget --header “Content-Type: application/json” --post-file query_test.json -O - '<a href="http://localhost:4200/_sql?types&error_trace= true" rel="nofollow noreferrer">http://localhost:4200/_sql?types&error_trace=true'

结果是: 4003 : “SQLActionException[ColumnValidationException: Validation failed for arr: '[{\“t\“:1}, {\“z\”:\“foo\“}]' 不能转换为类型 object_array] ”</p>

如果我从 Web 控制台运行它: INSERT INTO “test” (“name”,“arr”) VALUES ('test', [{“t”=1}, {“z”='foo'}]); 它工作正常......知道我做错了什么吗?

4

1 回答 1

0

只需删除数组参数值的周围引号,不要转义数组内的引号,例如:

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

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

于 2017-10-22T08:56:22.877 回答