卷曲API并从JSON获取特定字段

3ff*_*fff 5 shell parsing json curl http

我正在卷曲如下

curl -X GET "https://api.mercadolibre.com/items/MLA511127356"
Run Code Online (Sandbox Code Playgroud)

响应是一个JSON,例如以下代码:

"id": "MLA511127356",
  "site_id": "MLA",
  "title": "Item De Testeo, Por Favor No Ofertar --kc:off",
  "subtitle": null,
  "seller_id": "160252486",
  "category_id": "MLA4967",
  "official_store_id": null,
  "price": 10,
  "base_price": 10,
  "original_price": null,
  "currency_id": "ARS",
  "initial_quantity": 16,
Run Code Online (Sandbox Code Playgroud)

有没有简单的方法可以做到这一点?

谢谢!

Rhu*_*lus 10

正如这里提到的您可以使用grep -Po '"keyThatYouWant":.*?[^\\]",' file.json. 像那样:

local result=$(curl -X GET $YOUR_HUGE_URL)
echo $result | grep -Po '"keyThatYouWant":.*?[^\\]",'
Run Code Online (Sandbox Code Playgroud)


小智 6

jq非常令人印象深刻,但如果您不想安装另一个依赖项,则使用 python 是一个不错的选择,如果需要进一步处理,它还可以为您提供一些额外的灵活性。

它的主要内容是将 json curl 结果通过管道传输到python -c.

例子:

curl -X GET https://jsonplaceholder.typicode.com/comments/4 | python -c "import sys,json; print json.load(sys.stdin)['email']"
Run Code Online (Sandbox Code Playgroud)

  • 这几乎可以完美满足我的需求。但是,我不明白为什么所有内容都有单引号,因此不是有效的 JSON。当我找到答案时,我会进一步评论。好的,找到了:用 `json.dumps(json.load(sys.stdn)['email])` 包裹 `json.load(sys.stdn)['email]` (这也适用于最终输出文件 ` > results.json` - 根据我自己的需要) (2认同)

vis*_*ots 5

通过使用jq,您可以解析json数据,而不是基于文本的解析。

curl -X GET "https://api.mercadolibre.com/items/MLA511127356" | jq '.[].id'
Run Code Online (Sandbox Code Playgroud)