【问题标题】:Parse JSON jq return only keys not values [duplicate]解析JSON jq仅返回键而不是值[重复]
【发布时间】:2021-06-13 17:04:17
【问题描述】:

可以说我有这个:

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吗?
  • 您能否提供一个(小!)具有代表性的 JSON 对象以及您希望从中提取的内容,而不是期望人们下载一个大的随机文件?
  • xidel 来说真的很容易:xidel -s "<your-json-url>" -e '$json/map:keys(paths)'

标签: json bash data-processing jsonparser


【解决方案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 字符串。

【讨论】:

  • 老兄,这很有效,真的,史诗般的人,我欠你一个 ;)
猜你喜欢
  • 1970-01-01
  • 2017-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-13
  • 1970-01-01
  • 1970-01-01
  • 2018-06-25
相关资源
最近更新 更多