2017-02-23 119 views
1

我似乎正在努力削减从CloudFlare's API的JSON响应。Cloudflare API截断JSON响应

当我卷曲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" 

这是因为我的课程,由管道将卷曲蟒蛇削减IT -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" 

但空空间似乎造成困难。我也尝试通过使用awksed来削减回复,但我不熟悉这些工具,也没有成功。

有人更熟悉切割文本请帮助我。先谢谢你。

+0

看看http://stackoverflow.com/questions/12934699/selecting-fields-from-json-output –

回答

0

您可以使用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

+0

令人惊叹!谢谢队友,我一直在用** jq **测试过去的一个半小时,无法弄清楚正确的语法。非常感谢,这完全解决了我的问题。 –