Home > database >  Creating json-file with json-objects array using jq in bash
Creating json-file with json-objects array using jq in bash

Time:10-22

I have an input row like this: 1374240, 1374241. I need to make json file:

{
  "version": "1.0",
  "tests": [
    {
      "id": 1374240,
      "selector": ""
    },
    {
      "id": 1374241,
      "selector": ""
    }
  ]
}

I maked associated array:

idRow='1374240, 1374241'
IFS=',' read -r -a array <<<"$idRow"
trimmedArray=()
for id in "${array[@]}"; do
  trimmedId="$(echo -e "${id}" | xargs)"
  testRow="{\"id\":${trimmedId},\"selector\":\"\"}"
  trimmedArray =("$testRow")
done
echo "${trimmedArray[*]}"

Output:

{"id":1374240,"selector":""} {"id":1374241,"selector":""}

How i can insert it in final json structure and write a file? I am tried a different variants with jq, but I can`t get finally structure. Please, help.

CodePudding user response:

Read in the numbers as raw text using -R, split at the ,, use tonumbers to convert them to numbers, and create the structure on the fly:

echo "1374240, 1374241" | jq -R '
  {version:"1.0",tests:(
    split(",") | map(
      {id: tonumber, selector: ""}
    )
  )}
'

Demo

If you can omit the comma in the first place, it's even easier to read in numbers as they itself are JSON:

echo "1374240 1374241" | jq -s '
  {version:"1.0",tests: map(
    {id: tonumber, selector: ""}
  )}
'

Demo

Output:

{
  "version": "1.0",
  "tests": [
    {
      "id": 1374240,
      "selector": ""
    },
    {
      "id": 1374241,
      "selector": ""
    }
  ]
}
  • Related