Parse json array in shell script [duplicate] Parse json array in shell script [duplicate] unix unix

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"