繁体   English   中英

使用 jq(shell 脚本)更新 json 中的值

[英]Update values in json with jq (shell script)

我正在尝试使用 shell 脚本更新 json 数组(单独的文件)中的几个值。 基本上逻辑是,设置一个名为 URL 的环境变量,ping 该 URL 并将其添加到 json - 如果为 0,则将另一个 json 字段更新为 SUCCESS,否则更新为 FAILED。

以下是文件:

信息.json:

{
 "name": "PingTest",",
 "metrics": [
{
  "event_type": "PingResult",
  "provider": "test",
  "providerUrl": "URL",
  "providerResult": "RESULT"
}
]
}

pinger.sh:

#!/bin/sh

JSON=`cat info.json` #read in JSON

#Assume URL variable is set to www.dksmfdkf.com 
ping -q -c 1 "$URL" > /dev/null #ping url
if [ $? -eq 0 ]; then #if ping success, replace result in json template
  JSON=`echo ${JSON} | jq --arg v "$URL" '.metrics[].providerUrl |= $v' 
  info.json`
  JSON=`echo ${JSON} | jq '.metrics[].providerResult |= "SUCCESS"' info.json`
else
  JSON=`echo ${JSON} | jq --arg v "$URL" '.metrics[].providerUrl |= $v' 
  info.json`
  JSON=`echo ${JSON} | jq '.metrics[].providerResult |= "FAILED"' info.json`
fi

#Remove whitespace from json
JSON=`echo $JSON | tr -d ' \t\n\r\f'`

#Print the result
echo "$JSON"

问题是我的 json 文件没有正确更新,运行时的示例结果:

home:InfraPingExtension home$ ./pinger.sh
ping: cannot resolve : Unknown host
{
  "name": "PingTest",
  "metrics": [
  {
    "event_type": "PingResult",
    "provider": "test",
    "providerUrl": "",
    "providerResult": "RESULT"
  }
 ]
 }
{
  "name": "PingTest",
  "metrics": [
{
  "event_type": "PingResult",
  "provider": "test",
  "providerUrl": "URL",
  "providerResult": "FAILED"
}
  ]
}

{"name":"PingTest","metrics":[{"event_type":"PingResult","provider":"test","providerUrl":"URL","providerResult":"RESULT"}]}

这将通过只调用一次jq大大简化。

host=${URL#http://}; host=${host#https://}; host=${host%%/*}
if ping -q -c 1 "$host"; then
  result=SUCCESS
else
  result=FAILED
fi

JSON=$(
  jq -c \
     --arg url "$URL" \
     --arg result "$result" \
     '.metrics[].providerUrl |= $url
      | .metrics[].providerResult |= $result
  ' info.json
)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM