加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

在shell脚本中解析json数组

发布时间:2020-12-15 22:43:47 所属栏目:安全 来源:网络整理
导读:参见英文答案 Parsing JSON with Unix tools????????????????????????????????????35个 我需要从json字符串打印键和值.我已经解析了一个简单的json字符串 { "Name": "test1","CreateDate": "2016-08-30T10:52:52Z","Id": "testId1",} 我的代码是这样的 q1=$(
参见英文答案 > Parsing JSON with Unix tools????????????????????????????????????35个
我需要从json字符串打印键和值.我已经解析了一个简单的json字符串

{
              "Name": "test1","CreateDate": "2016-08-30T10:52:52Z","Id": "testId1",}

我的代码是这样的

q1=$(echo $x | grep -Po '"Name":.*?[^]",'| perl -pe 's/"Name": //; s/^"//; s/",$//');

 q2=$(echo $x | grep -Po '"Id":.*?[^]",'| perl -pe 's/"Id": //; s/^"//; s/",$//');

    echo $q1 "," $q2;

但是这段代码不适用于像这样的json字符串

x='{    "TestNames":
        [{
        "Name": "test1","Id": "testId1"
         },{
        "Name":  "test2","CreateDate": "2016-08-30T10:52:13Z","Id": "testId2"
    }]
}';

我需要像这样打印

test1,testId1
test2,testId2

是否可以使用grep命令获取这样的数据?

解决方法

首先,你的数据是无效的json,有一个逗号太多了:

{
  "TestNames": [
    {
      "Name": "test1",<--- Remove that!
    },{
      "Name": "test2","Id": "testId2"
    }
  ]
}

一旦修复了,就可以使用jq在命令行上解析json:

echo "$x" | jq -r '.TestNames[]|"(.Name),(.Id)"'

如果你需要保持输出值.

declare -A map1

while read name id ; do
    echo "$name"
    echo "$id"
    map1[$name]=$id

done < <(echo "$x" | jq -r '.TestNames[]|"(.Name) (.Id)"')

echo "count : ${#map1[@]}"
echo "in loop: ${map1[$name]}"

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读