Как поместить объект 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 ответа:
командная строка должна быть - 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