jsonbashmultidimensional-arrayjsawk

How to parse multidimensional JSON array in bash using jsawk?


I have an array like below. I want to parse entire data to my bash array. So i can call the first "JSON addressLineOne" from ${bashaddr[0]}, and etc.

[
{
"id":"f0c546d5-0ce4-55ee-e043-516e0f0afdc1",
"cardType":"WMUSGESTORECARD",
"lastFour":"1682",
"cardExpiryDate":"2012-01-16",
"firstName":"robert",
"lastName":"robishaw",
"addressLineOne":"Apt venue",
"addressLineTwo":"",
"city":"oakdale",
"state":"CT",
"postalCode":"06370",
"phone":"534534",
"isDefault":false
},
{
"id":"f0c546d5-0ce0-55ee-e043-516e0f0afdc1",
"cardType":"MASTERCARD",
"lastFour":"2731",
"cardExpiryDate":"2009-08-31",
"firstName":"robert",
"lastName":"robishaw",
"addressLineOne":"119 maple ave.",
"addressLineTwo":"",
"city":"uncasville",
"state":"CT",
"postalCode":"06382",
"phone":"7676456",
"isDefault":false
},
{
"id":"f0c546d5-0ce2-55ee-e043-516e0f0afdc1",
"cardType":"MASTERCARD",
"lastFour":"6025",
"cardExpiryDate":"2011-08-31",
"firstName":"robert",
"lastName":"robishaw",
"addressLineOne":"Angeline Street",
"addressLineTwo":"",
"city":"oakdale",
"state":"CT",
"postalCode":"06370",
"phone":"7867876",
"isDefault":false
}

]

I have tried like this:

#!/bin/bash
addressLineOne="$(echo $card | jsawk 'return this.addressLineOne')"

but it gives me the entire address:

["address 1","address 2","address 3"]

Thank you.


Solution

  • I wrote the answer below before reading the comments, but this is exactly the same answer as @4ae1e1 provided, except I don't put -r tag in case you want the values to remain quoted (e.g. passing this as an argument somewhere else).

    I know this is not jsawk, but do consider jq:

    jq '.[].addressLineOne' yourfile.txt

    And to access specific values you can put record number in the square brackets (starting with 0 for the first address and so on). For example to get the address for the third record:

    jq '.[2].addressLineOne' yourfile.txt

    For learning more about jq and advanced uses, check: http://jqplay.org