在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]}" (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |