Анализ JSON jq возвращает только ключи, а не значения

скажем, у меня есть это:

https://api.apis.guru/v2/specs/adyen.com/CheckoutService/64/openapi.json

и я хочу захватить:

/orders
/orders/cancel
/originKeys
/paymentLinks
/paymentLinks/{linkId}
/paymentMethods
/paymentMethods/balance
/paymentSession
/payments
/payments/details
/payments/result

Я хочу сделать это элегантным способом, просто захватывая пути, то, что я делаю, - это уродливый обходной путь, который не работает с некоторыми API:

curl -A "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:86.0) Gecko/20100101 Firefox/86.0" -ks "https://api.apis.guru/v2/specs/adyen.com/CheckoutService/64/openapi.json"  | jq -r '.paths' | grep "/" | grep "{" | egrep -iv "microsoft|amz|application/json|application/jwt|\*|text/xml|text/plain|application/|multipart/form-data|text/html" | cut -d "\"" -f 2

person aDoN    schedule 16.03.2021    source источник
comment
Вы можете использовать jq?   -  person Inian    schedule 16.03.2021
comment
Можете ли вы предоставить репрезентативный объект JSON (маленький!) и то, что вы хотите извлечь из него, вместо того, чтобы ожидать, что люди загрузят большой случайный файл?   -  person Shawn    schedule 16.03.2021
comment
Очень просто для xidel: xidel -s "<your-json-url>" -e '$json/map:keys(paths)'.   -  person Reino    schedule 17.03.2021


Ответы (1)


Использование jq:

$ jq -r '.paths | keys | .[]' openapi.json
/orders
/orders/cancel
/originKeys
/paymentLinks
/paymentLinks/{linkId}
/paymentMethods
/paymentMethods/balance
/paymentSession
/payments
/payments/details
/payments/result

В вашем случае вы, конечно, захотите передать свой вывод curl в jq вместо использования файла.

Биты импорта по сравнению с вашим использованием jq заключаются в передаче массива .paths в keys и в .[], чтобы получить один элемент в строке вместо массива JSON, и -r, чтобы избежать печати каждой строки в виде строки JSON с кавычками.

person Shawn    schedule 16.03.2021
comment
Чувак, это действительно сработало, эпический человек, я тебе должен ;) - person aDoN; 16.03.2021