Parse json array in shell script [duplicate]
First, your data is not valid json, there is a comma too much:
{ "TestNames": [ { "Name": "test1", "CreateDate": "2016-08-30T10:52:52Z", "Id": "testId1", <--- Remove that! }, { "Name": "test2", "CreateDate": "2016-08-30T10:52:13Z", "Id": "testId2" } ]}
Once you've fixed that you can use jq
for parsing json on the command line:
echo "$x" | jq -r '.TestNames[]|"\(.Name) , \(.Id)"'
if you need to keep the output values.
declare -A map1while read name id ; do echo "$name" echo "$id" map1[$name]=$iddone < <(echo "$x" | jq -r '.TestNames[]|"\(.Name) \(.Id)"')echo "count : ${#map1[@]}"echo "in loop: ${map1[$name]}"
I'd recommend using jq
, a command-line JSON
parser :
$ echo '''{ "Name": "test1", "CreateDate": "2016-08-30T10:52:52Z", "Id": "testId1" }''' | jq '.Name + " , " + .Id'"test1 , testId1"$ echo '''{ "TestNames": [{ "Name": "test1", "CreateDate": "2016-08-30T10:52:52Z", "Id": "testId1" }, { "Name": "test2", "CreateDate": "2016-08-30T10:52:13Z", "Id": "testId2"}]}''' | jq '.TestNames[] | .Name + " , " + .Id'"test1 , testId1""test2 , testId2"