2017-01-22 47 views
0

我有一个包含存储在一个变量对象列表的JSON输出值(我可以不措辞是正确的)Linux的grep命令找到钥匙从JSON

输出卷曲命令:将发表评论,因为我无法发布在这里

我想grep在这个位置“ad6743fae9c54748b8644564c691ba58”在输出中显示的值,每当我运行curl命令时都会改变。我想把它作为其他curl命令的输入。

请帮

+0

'{ “目的地”:[ { “ad6743fae9c54748b8644564c691ba58”:{ “throttle_bytes_per_second”: “0”, “delete_this”:假, “路径”: “s3testbucket”, “server_side_encryption”:假, “提供者”: “S3”, “access_key”: “XXXXXXXXXXX”, “access_secret”: “XXXXXXXXXXXXXXXXXXXXX” } } ], “REQUEST_ID”: “d6e089bb-9729-423b-8319-d441e0a72202” }' – vr1111

回答

1

“JQ” https://stedolan.github.io/jq/download/需要这一点。如果为“ad6743fae9c54748b8644564c691ba58”,每次都改变一次,那么下面的脚本怎么样?

of="data.json" && curl ..... -o $of > $of && key=$(cat $of | jq -r '.destination[0]|keys' | jq -r '.[]') && jq -r ".destination[0].$key" $of && unset key of 
  • 得到的数据通过卷曲是为 “$” 的名称输出。

  • “ad6743fae9c54748b8644564c691ba58”的位置被检索为“$ key”。

  • 使用“$ key”输出“ad6743fae9c54748b8644564c691ba58”的值。

例如,在该脚本中,当“ad6743fae9c54748b8644564c691ba58”的位置不变化,“ad6743fae9c54748b8644564c691ba58”可以改变为“abcdefg1234567”。

0

使用jq curl 'http://.../some.json' | jq .destination[0].ad6743fae9c54748b8644564c691ba58

0

这样?:

#!/usr/bin/env python 
 
#coding:utf-8 
 
import sys 
 
import json 
 
aa = '''{ 
 
    "destination": [ 
 
     { 
 
      "ad6743fae9c54748b8644564c691ba58": { 
 
       "throttle_bytes_per_second": "0", 
 
       "delete_this": false, 
 
       "path": "s3testbucket", 
 
       "server_side_encryption": false, 
 
       "provider": "s3", 
 
       "access_key": "XXXXXXXXXXX", 
 
       "access_secret": "XXXXXXXXXXXXXXXXXXXXX" 
 
      } 
 
     } 
 
    ], 
 
    "request_id": "d6e089bb-9729-423b-8319-d441e0a72202" 
 
}''' 
 

 
# aa=sys.argv[1] 
 

 
bb = json.loads(aa) 
 
print bb["request_id"]