Использование HTTP API crate для вставки массива объектов: ошибка 4003

Я пытаюсь вставить строку, используя конечную точку HTTP Crate 2.1.8, но она систематически завершается с ошибкой 4003. Моя таблица содержит столбец, представляющий собой массив объектов, и с ошибкой 4003: "SQLActionException[ColumnValidationException: проверка не удалась для обр: "[{\" T \ ":1}, {\" z\ ": \" foo \ "}] 'нельзя привести к типу object_array]"

Вот создание таблицы: СОЗДАЙТЕ ТАБЛИЦУ, ЕСЛИ НЕ СУЩЕСТВУЕТ "doc". "test" ("arr" ARRAY(OBJECT (DYNAMIC)), "name" STRING)

теперь вот мой JSON:

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

и моя команда для отправки запроса: wget --header "Content-Type: application/json" --post-файл query_test.json -O - " http://localhost:4200/_sql?types&error_trace=true"

Результат: 4003: "SQLActionException[ColumnValidationException: проверка не удалась для arr:" [{\ \ t \ ":1}, {\" z\ ": \" foo \ "}]" нельзя привести к типу object_array] "

Если я запускаю это из веб-консоли: INSERT INTO "test" ("name", "arr") VALUES ("test", [{"t" =1}, {"z" = "foo"}]); Работает нормально... есть идеи, что я делаю не так?

1 ответ

Решение

Просто удалите окружающие кавычки значения аргумента вашего массива и не избегайте кавычек внутри вашего массива, например:

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

в противном случае это строковое значение JSON, а не массив, и поэтому CrateDB интерпретирует его как строку.

Другие вопросы по тегам