问题描述
假设我有这个:
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
解决方法
使用 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 字符串。