Как поместить объект 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`
Ответ 4
Единственное, что помогло, это использовать файл JSON вместо текстового текста json. На основе Как отправить содержимое файла в качестве объекта body с помощью cURL
Ответ 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 является первым символом