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

У меня есть ряд данных для входа в базу данных. Пользовательский интерфейс для ввода данных не подходит для массового ввода, поэтому я пытаюсь сформулировать эквивалент командной строки. Когда я просматриваю сетевой запрос UI в 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, содержащий массив?

Ответ 1

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

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

Ответ 2

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

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

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

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

Ответ 3

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

Часто при отправке JSON рекомендуется указывать Content-Type как application/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`

Ответ 5

Попробуйте использовать одинарные кавычки вместо двойных кавычек вместе с -g

Следующий сценарий сработал для меня

curl -g -d '{"collection":[{"NumberOfParcels":1,"Weight":1,"Length":1,"Width":1,"Height":1}]}" -H "Accept: application/json" -H "Content-Type: application/json" --user [email protected]:123456 -X POST  https://yoururl.com

С

curl -g -d "{'collection':[{'NumberOfParcels':1,'Weight':1,'Length':1,'Width':1,'Height':1}]}" -H "Accept: application/json" -H "Content-Type: application/json" --user [email protected]:123456 -X POST  https://yoururl.com

Это особенно решило мою ошибку в команде curl: неправильный двоеточие URL является первым символом