I have a bash script that is aimed at parsing the JSON formatted data. I learned from an earlier query on this forum that bash is not good at parsing JSON, and so intend to use a python function to do the parsing:
The following is the code snippet:
#!/bin/bash
set -e
declare -a data_id
declare -a data_tid
function parse_data () {
python <<EOF
import json
parsed = json.loads('''${@}''')
data_id = []
data_tid = []
for child in parsed['params']['children'][0]:
print 'id: %s' % (child['data']['id'])
data_id.append(child['data']['id'])
print 'tid: %s' % (child['data']['tid'])
data_tid.append(child['data']['tid'])
EOF
}
json=$(get_json_output)
parse_data $json
The data stored in 'json' would look like this:
{
"cid": "1",
"code": null,
"error": null,
"params": {
"children": [
{
"value": {
"id": "0123456789",
"tid": "a.b.c"
},
"data": {
"id": "0987654321",
"tid": "p.q.r"
},
"tid": "m.n.o.p",
}
],
"tid": "m.n.o.p"
},
"reason": null,
"result": true
}
I'd like the script to be able to extract the 'id' and 'tid' fields from under 'data', into separate arrays. But the script execution fails as follows:
root@ubuntu# ./abc.sh
Traceback (most recent call last):
File "<stdin>", line 7, in <module>
TypeError: string indices must be integers
Any idea on what's wrong?