كيفية طباعة جسم إخراج JSON من أجل تنسيقه في وحدة تحكم bash مثل
macbookproloreto:~ admin$ echo '{"foo": "lorem", "bar": "ipsum"}' | python -m json.tool
{
"bar": "ipsum",
"foo": "lorem"
}
أمري تبدو الآن
http --session=cookies.txt --pretty all --json --print=b --style=xcode "https://myapi.company.com | python -m json.tool
هل الخيار --pretty
يهدف إلى طباعة نص المخرجات بشكل جيد؟ بعد أن يبدو أنه لا يقوم بتجميل جسم الإخراج ، فإنه يطبع json كنص عادي بدلاً من ذلك
'{"foo": "lorem", "bar": "ipsum"}'
هذا يعمل خارج الصندوق:
jkbrzt نعم ولكن هذا ليس الرد body
. يبدو أنه ليس جميل الجسد ولكن فقط headers
.
loretoparisi إنها هيئة الاستجابة ، راجع http://httpbin.org/get
حسنًا ، لقد وجدت المشكلة ، هناك شيء خاطئ في رؤوس الردود. في الواقع ، إذا جربت هيئة استجابة جيدة التنسيق بتنسيق json مثل:
http --session=cookies.txt --pretty all --json --print=b --style=xcode "https://api.spotify.com/v1/tracks/0eGsygTp906u18L0Oimnem"
إنها تعمل.
عندما تكون رؤوس استجابة http text/plain
HTTP/1.1 200 OK
Connection: keep-alive
Content-Encoding: gzip
Content-Length: 1996
Content-Type: text/plain; charset=utf-8
التنسيق الناتج عادي.
ينظر HTTPie في رأس الاستجابة Content-Type
. إذا كان text/plain
، فلن يقوم بأي تنسيق خاص. يرجع عنوان URL الذي قدمته Content-Type: application/json; charset=utf-8
لذلك يتم تنسيقه بشكل صحيح وتمييزه كـ JSON.
jkbrzt بالضبط. في الواقع ، كانت المشكلة هي أن رؤوس الخادم كانت text/plain
بينما كان النص الأساسي عبارة عن نص منسق كجسم json (تنسيق json جيد التنسيق). في الأساس ، رأس الاستجابة Content-Type
ليس application/json
. هل يمكن لـ HTTPie
فرض تنسيق json في تلك الحالات؟
التعليق الأكثر فائدة
jkbrzt بالضبط. في الواقع ، كانت المشكلة هي أن رؤوس الخادم كانت
text/plain
بينما كان النص الأساسي عبارة عن نص منسق كجسم json (تنسيق json جيد التنسيق). في الأساس ، رأس الاستجابةContent-Type
ليسapplication/json
. هل يمكن لـHTTPie
فرض تنسيق json في تلك الحالات؟