【问题标题】:Cloudflare API cut JSON responseCloudflare API 削减 JSON 响应
【发布时间】:2017-07-14 14:53:20
【问题描述】:

我似乎在努力削减来自CloudFlare's API 的 JSON 响应。

当我 CURL https://api.cloudflare.com/client/v4/zones/xxxx/settings URL 时,它会在 JSON 响应中返回我域的区域的所有设置,例如:

        "editable": true,
        "id": "server_side_exclude",
        "modified_on": null,
        "value": "on"
    },
    {
        "editable": false,
        "id": "sha1_support",
        "modified_on": null,
        "value": "off"
    },
    {
        "editable": false,
        "id": "sort_query_string_for_cache",
        "modified_on": null,
        "value": "off"
    },
    {
        "certificate_status": "active",
        "editable": true,
        "id": "ssl",
        "modified_on": "2016-05-18T14:38:45.665403Z",
        "value": "flexible"

这是因为我当然是通过将 curl 管道传递到 python -m json.tool 来切割它。我想要实现的基本上是打印所有内容,例如:

server_side_exclude = on
sha1_support = off
sort_query_string_for_cache = off

(ID = 值)。我试图将 ID 和值存储在单独的变量中,例如:

IDs=$(curl https://api.cloudflare.com/client/v4/zones/xxxx/settings | python -m json.tool | grep id)
Values=$(curl https://api.cloudflare.com/client/v4/zones/xxxx/settings | python -m json.tool | grep value)

然后将它们彼此相邻打印,例如:

echo "$IDs = $Values"

但空格似乎会造成困难。我也尝试使用 awk 和 sed 来减少回复,但对这些工具不太熟悉,也没有成功。

请更熟悉剪切文本的人帮助我。提前谢谢你。

【问题讨论】:

标签: json bash curl awk sed


【解决方案1】:

你可以使用jq来解析json:

curl https://api.cloudflare.com/client/v4/zones/xxxx/settings | \
    jq '.result | map({(.id):.value}) | add'

它给出:

{
  "always_online": "on",
  "server_side_exclude": "on",
  "sha1_support": "off",
  "sort_query_string_for_cache": "off",
  "ssl": "flexible"
}

如果要提取一个字段的值,对于server_side_exclude:

curl https://api.cloudflare.com/client/v4/zones/xxxx/settings | \
    jq -r '.result | map({(.id):.value}) | add | .server_side_exclude'

我用于解析的输入是here

【讨论】:

  • 太棒了!谢谢伙计,在过去的一个半小时里,我一直在用 jq 进行测试,但找不到正确的语法。非常感谢,这完全解决了我的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-11
  • 2012-01-18
  • 2019-09-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多