1

I have an json formatted array as follows:

myArray='["GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN","GREEN"]'

How do I read this simple json array into a bash array? I have seen plenty of specific answers for specific problems on this but haven't been able to find an answer for the basic version of it.

What I want is an array a=(GREEN GREEN GREEN ...)

I have tried readarray -t array <<< $myArray. This strips the quotes but doesn't create an actual array.

TTT
  • 1,952
  • 18
  • 33

1 Answers1

0

It looks like you want a regular array, not an associative one. Just use jq to turn the JSON into a form suitable for use with the mapfile/readarray builtin:

#!/usr/bin/env bash
myArray='["GREEN","GREEN","GREEN","GREEN","GREEN"]'
readarray -t a <<< "$(jq -r '.[]' <<< "$myArray")"
echo "a has ${#a[@]} elements. First one is ${a[0]}."

will output

a has 5 elements. First one is GREEN.

Note that this won't work right if any of the array elements have newlines in them.

Shawn
  • 47,241
  • 3
  • 26
  • 60
  • See the bullet point in the "Answer Well-Asked Questions" section of [How to Answer](https://stackoverflow.com/help/how-to-answer) regarding questions "that have been asked and answered many times before". – Charles Duffy Apr 09 '20 at 00:16
  • 1
    Have you considered that it's because it's been asked so many times before that it was so hard for me to find an existing, usable answer? Anyway, thanks Shawn, much appreciated. – TTT Apr 09 '20 at 00:45