【问题标题】:Parsing and storing the json output of a curl command in bash在 bash 中解析和存储 curl 命令的 json 输出
【发布时间】:2017-10-30 15:25:05
【问题描述】:

我有五个 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 语句,它们依赖于前面语句中生成的值来执行。任何有关如何理解的见解。

【问题讨论】:

    标签: bash curl jq


    【解决方案1】:

    下载并安装jq,类似于sed 用于JSON 数据。您可以使用它对结构化数据进行切片、过滤、映射和转换,就像sedawkgrep 对非结构化数据所做的一样。请记住将 '...' 替换为您的实际 curl 参数

    curl '...' | jq --raw-output '.AssetID'
    

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

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

    curl 命令中,删除-i 标志以仅输出不带标头信息的JSON 数据。

    【讨论】:

    • 成功了!谢谢你,Inian,非常感谢你的帮助!
    • 建议的编辑队列已满,但我相信很多人建议将< curl command > 之类的部分更改为更清晰一些,因为很多人都在阅读 符号作为有价值的代码,但实际上在这里使用它来显示这样的<curl command> | jq,它的阅读方式与< curl command > | jq非常不同。
    • @Urasquirrel:没错,已修改!谢谢
    猜你喜欢
    • 2015-11-08
    • 1970-01-01
    • 2015-04-22
    • 2023-01-31
    • 2020-04-30
    • 2012-03-15
    • 1970-01-01
    • 2013-08-29
    • 1970-01-01
    相关资源
    最近更新 更多