Использование 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 интерпретирует его как строку.