Mam szereg danych do wprowadzenia do bazy danych. Interfejs użytkownika do wprowadzania danych nie nadaje się do wprowadzania zbiorczego, więc próbuję sformułować odpowiednik w wierszu poleceń. Kiedy sprawdzam żądanie sieciowe interfejsu użytkownika w przeglądarce Chrome, widzę żądanie PUT obiektu json. Kiedy próbuję powtórzyć żądanie
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`
Pojawia się błąd
curl: (3) [globbing] nawiasy zagnieżdżone nie są obsługiwane w pozycji X
Gdzie X to pozycja znaku pierwszego „[”.
Jak mogę umieścić obiekt json zawierający tablicę?
Chociaż oryginalny post miał inne problemy (np. Brakujące „-d”), komunikat o błędzie jest bardziej ogólny.
Dzieje się tak, ponieważ nawiasy klamrowe {} i nawiasy kwadratowe [] są specjalnymi znakami globalizującymi w curl. Aby wyłączyć to globowanie, użyj opcji „ -g ”.
Na przykład następujące zapytanie aspektu Solr nie powiedzie się bez opcji „-g” wyłączającej globowanie curl :
curl -g 'http://localhost:8983/solr/query?json.facet={x:{terms:"myfield"}}'
źródło
-g
działało zgodnie z oczekiwaniami. Dzięki @YonikNależy wspomnieć, że
Accept
nagłówek mówi serwerowi coś o tym, co przyjmujemy z powrotem, podczas gdy odpowiedni nagłówek w tym kontekście jestContent-Type
Często zaleca się określenie,
Content-Type
jakapplication/json
podczas wysyłania JSON. Składnia curl wygląda następująco:-H 'Content-Type: application/json'
Więc kompletne polecenie curl będzie wyglądać następująco:
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`
źródło
Spróbuj użyć pojedynczego cudzysłowu zamiast podwójnych cudzysłowów wraz z opcją -g
Poniższy scenariusz zadziałał dla mnie
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
Z
curl -g -d "{'collection':[{'NumberOfParcels':1,'Weight':1,'Length':1,'Width':1,'Height':1}]}" -H "Accept: application/json" -H "Content-Type: application/json" --user test@testmail.com:123456 -X POST https://yoururl.com
To szczególnie rozwiązało mój błąd polecenia curl: zły dwukropek adresu URL to pierwszy znak
źródło
Jedyne, co pomogło, to użycie pliku JSON zamiast tekstu podstawowego w formacie JSON. Na podstawie sposobu wysyłania zawartości pliku jako jednostki treści przy użyciu cURL
źródło