regex AWK命令从JSON读取值

ac1kyiln  于 2023-11-20  发布在  其他
关注(0)|答案(1)|浏览(203)

我想用AWK命令从json下面读取一个值,输入键值,

"[{\"key\":\"ResourceClass\",\"value\":\"SingleNode\"},{\"key\":\"Vendor\",\"value\":\"AWS\"},{\"key\":\"Creator\",\"value\":\"ea35b938-c575-41d3-8705\"},{\"key\":\"ClusterName\",\"value\":\"cluster-Offer\"},{\"key\":\"ClusterId\",\"value\":\"056-987-656\"},{\"key\":\"JobId\",\"value\":\"1323\"},{\"key\":\"RunName\",\"value\":\"OfferDataProcess\"}]"

字符串
给定键的预期输出

"RunName"
OfferDataProcess

cld4siwp

cld4siwp1#

您的源代码不是正确的JSON。
由于AWK不理解JSON,你也应该停止把JSON看作是一个字符串。
类似这样的操作将获得特定示例的预期结果

BEGIN{
  FS="{"
  key="RunName"

}
{
for (i=1; i<=NF; i++){
    if ($i~key) {
      mykey=$i

      # ----- first variant ------ correct json
      # match on    "value":"mystringhere"
      c=match(mykey, /"value":"([^"]*)/, arr)
      if (c>1){
        print "\""key"\""
        print arr[1]
      }

      # ----- second variant ----- quoted json
      # match on   \"value\":\"mystringhere\"
      c=match(mykey, /\\"value\\":\\"([^\\]*)/, aq)
      if (c>1){
        print "\""key"\""
        print aq[1]
      }
     } # if
    } #forloop
} #actions

字符串

相关问题