在bash中解析并存储curl命令的json输出

时间:2017-10-30 15:25:06

标签: bash curl

我有五个cURL语句可以自行运行,并尝试将它们组合在一个bash脚本中。每个cURL语句都依赖于从它之前执行的cuRL语句生成的变量。我试图找出最明智的方法来解决这个问题。这是第一个cURL声明;

curl -i -k -b sessionid -X POST https://base/resource -H "Content-Type: application/json" -H "Authorization: Authorization: PS-Auth key=keyString; runas=userName; pwd=[password]" -d "{\"AssetName\":\"apiTest\",\"DnsName\":\"apiTest\",\"DomainName\":\"domainNameString\",\"IPAddress\":\"ipAddressHere\",\"AssetType\":\"apiTest\"}"

这很好用,它会产生这个输出;

{"WorkgroupID":1,"AssetID":57,"AssetName":"apiTest","AssetType":"apiTest","DnsName":"apiTest","DomainName":"domainNameString","IPAddress":"ipAddressHere","MacAddress":null,"OperatingSystem":null,"LastUpdateDate":"2017-10-30T15:18:05.67-07:00"}

但是,在下一个cURL语句中,我需要使用AssetID中的整数来执行它。简而言之,我如何获取AssetID值并将其存储到要在下一个语句中使用的变量中?总的来说,我将使用5个cURL语句,它们依赖于前面语句中生成的值来执行。任何有关如何欣赏的见解。

1 个答案:

答案 0 :(得分:2)

jq数据下载并安装sed JSON。您可以使用它来切片和过滤以及映射和转换结构化数据,同样方便sedawkgrep为非结构化数据。

< curl command > | jq --raw-output '.AssetID'

并将其存储在变量use command-substitution语法中以运行命令并返回结果。

asset_ID=$( < curl command > | jq --raw-output '.AssetID' )

curl命令中,删除-i标志,仅输出JSON数据而不显示标题信息。