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

Kim*_*aru 7 bash curl jq

我有五个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\"}"
Run Code Online (Sandbox Code Playgroud)

这工作正常,它产生这个输出;

{"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"}
Run Code Online (Sandbox Code Playgroud)

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

Ini*_*ian 6

下载并安装jq这就像sed对于JSON数据。你可以用它来切片和过滤器和地图,并与同样方便的是变换结构化数据sedawkgrep确实为非结构化数据。

< curl command > | jq --raw-output '.AssetID'
Run Code Online (Sandbox Code Playgroud)

并将其存储在变量中,使用命令替换语法来运行命令并返回结果。

asset_ID=$( < curl command > | jq --raw-output '.AssetID' )
Run Code Online (Sandbox Code Playgroud)

curl命令中,去掉-i标志,只输出JSON没有头信息的数据。