返回给bash的JSON对象需要提取键值

返回给bash的JSON对象需要提取键值,json,bash,curl,Json,Bash,Curl,我有一个curl命令,它得到一个JSON响应,并给出下面的响应。我需要获取data.value的值 没有“黑客”解决方案,我怎么能做到这一点 { "request_id":"50aaabe7-d01b-0a83-da86-8f01cb1da74b", "lease_id":"", "renewable":false, "lease_duration":2764800, "data":{"value":"randomBinaryString"}, "

我有一个curl命令,它得到一个JSON响应,并给出下面的响应。我需要获取
data.value的值

没有“黑客”解决方案,我怎么能做到这一点

{
    "request_id":"50aaabe7-d01b-0a83-da86-8f01cb1da74b",
    "lease_id":"",
    "renewable":false,
    "lease_duration":2764800,
    "data":{"value":"randomBinaryString"},
    "wrap_info":null,
    "warnings":null,
    "auth":null
}

如果您安装了
jq
,则安装起来非常简单:

<curl-command> | jq .data.value
| jq.data.value
如果您不想安装额外的软件,并且响应总是以这种格式,则可以执行一些肮脏的操作:

<curl-command> | grep data | tr '":{' '   ' | awk '{print $3}'
| grep数据| tr':{''| awk'{打印$3}'

在“回答好问题”一节中,记下“以前已经被问过并回答过多次”的问题条目。在“黑客”一节中留下(当OP明确要求非黑客解决方案时)是…也许不太理想。如果你要做一个非常依赖格式和数据内容并且在大多数情况下都会被破坏的难看的黑客,那么几乎没有理由使用
grep
tr
awk
;只有awk可以完成这三个方面的工作。
awk-F'[:{[:space:]+''/“data”:/{print$3}“
,例如(呃,我觉得键入它有点脏)。完全同意。只是我更容易用其他术语而不是字段分隔符字符串来思考。正如您所说,这部分是备份(非请求),好的答案是第一部分。顺便说一句,“hacky”可以有很多含义。我的答案使用的特殊字符比你的少,所以不要表现得像你的(尽管是相同的)XD那么粗糙