Как поместить объект json с массивом с помощью curl


У меня есть ряд данных для ввода в базу данных. Пользовательский интерфейс для ввода данных не подходит для массового ввода, поэтому я пытаюсь сформулировать эквивалент командной строки. Когда я рассматриваю сетевой запрос пользовательского интерфейса в chrome, я вижу запрос PUT объекта json. Когда я пытаюсь повторить запрос

curl -H 'Accept: application/json' -X PUT '{"tags":["tag1","tag2"],"question":"Which band?","answers":[{"id":"a0","answer":"Answer1"},{"id":"a1","answer":"answer2"}]}' http://example.com/service`

ошибка

curl: (3) [globbing] вложенные фигурные скобки не поддерживаются в pos X

где X-позиция символа из первых" [".

Как я могу поместить объект json, который включает массив?

4 75

4 ответа:

командная строка должна быть - d / --data вставляется перед строкой, которую вы хотите отправить в PUT, и вы хотите установить тип контента и не принимать.

curl -H 'Content-Type: application/json' -X PUT -d '[JSON]' http://example.com/service

используя точные данные JSON из вопроса, полная командная строка станет:

curl -H 'Content-Type: application/json' -X PUT \
-d '{"tags":["tag1","tag2"],"question":"Which band?","answers":[{"id":"a0","answer":"Answer1"},{"id":"a1","answer":"answer2"}]}' \
http://example.com/service

хотя в исходном сообщении были другие проблемы (т. е. отсутствующий "-d"), сообщение об ошибке является более общим.

curl: (3) [globbing] вложенные фигурные скобки не поддерживаются в pos X

Это потому, что фигурные скобки {} и квадратные скобки [] имеют специальные подстановка символов в завиток. Чтобы отключить этот глобус, используйте " - g опции".

в качестве примера, следующий запрос фасета Solr завершится неудачей без " - g " для выключения завиток подстановка: curl -g 'http://localhost:8983/solr/query?json.facet={x:{terms:"myfield"}}'

следует отметить, что Accept заголовок сообщает серверу что-то о том, что мы принимаем обратно, тогда как соответствующий заголовок в этом контексте Content-Type

часто рекомендуется указывать Content-Type как application/json при отправке JSON. Для curl синтаксис:

-H 'Content-Type: application/json'

таким образом, полная команда curl будет:

curl -H 'Content-Type: application/json' -H 'Accept: application/json' -X PUT -d '{"tags":["tag1","tag2"],"question":"Which band?","answers":[{"id":"a0","answer":"Answer1"},{"id":"a1","answer":"answer2"}]}' http://example.com/service`

единственное, что помогло, это использовать файл JSON вместо основного текста json. На основе как отправить содержимое файла как сущность тела с помощью cURL