Skip to content

Instantly share code, notes, and snippets.

@dinhoabreu
Last active May 3, 2019 21:35
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dinhoabreu/b4b6158c003e4aae8b79e04e4964cfec to your computer and use it in GitHub Desktop.
Save dinhoabreu/b4b6158c003e4aae8b79e04e4964cfec to your computer and use it in GitHub Desktop.
jq_tut.sh - Simple jq tutorial by example
#!/usr/bin/env bash
jq_tut() {
local expr=$1 doc=$2
shift 2
echo "--> cat doc.json"
echo "$doc"
echo
echo "--> # $comment"
echo " cat doc.json | jq" "$@" "'$expr'"
jq "$@" "$expr" <<<"$doc"
}
usage() {
echo "Usage: $0 n"
echo
echo " 'n' is a number of tutorial (1..9)"
echo
return 1
}
main() {
local comment doc step=$1
if [[ -z $step ]]; then
usage >&2
return $?
fi
read -r -d '' doc <<-EOF
{
"value": [
{
"releaseEnvironment": {
"id": 1,
"name": "___PRD___"
}
},
{
"releaseEnvironment": {
"id": 2,
"name": "___DEV___"
}
}
]
}
EOF
comment='selecionando o valor da chave "value" do objeto raiz'
[[ $step = 1 ]] && jq_tut '.value' "$doc"
comment='selecionando o primeiro item do array do valor do passo anterior'
[[ $step = 2 ]] && jq_tut '.value[0]' "$doc"
comment='selecioando o "id" da chave "releaseEnvironment" do item do passo anterior'
[[ $step = 3 ]] && jq_tut '.value[0].releaseEnvironment.id' "$doc"
comment='filtrando os itens do "value" que o valor da chave "releaseEnvironment.id" > 1'
[[ $step = 4 ]] && jq_tut '.value[] | select(.releaseEnvironment.id > 1)' "$doc"
comment='filtrando os itens do "value" que o valor da chave "releaseEnvironment.name" contenha "PRD"'
[[ $step = 5 ]] && jq_tut '.value[] | select(.releaseEnvironment.name | test("PRD"))' "$doc"
comment='criando uma lista somente com os nomes dos releases'
[[ $step = 6 ]] && jq_tut '.value | map(.releaseEnvironment.name)' "$doc"
comment='echo dos nomes dos releases por linha'
[[ $step = 7 ]] && jq_tut '.value[] | .releaseEnvironment.name' "$doc" -r
comment='echo dos nomes dos releases por linha filtrando por "PRD"'
[[ $step = 8 ]] && jq_tut '.value[] | .releaseEnvironment.name | select(test("PRD"))' "$doc" -r
comment='criando uma chave "hash" combinada entre "id" e "name" em cada "releaseEnvironment"'
[[ $step = 9 ]] && jq_tut '.value | map(.releaseEnvironment as $r | .releaseEnvironment.hash |= ($r.id | tostring) + "_" + $r.name)' "$doc"
}
main "$@"
@dinhoabreu
Copy link
Author

jq is a lightweight and flexible command-line JSON processor.

./jq_tut.sh

Usage: ./jq_tut.sh n

 'n' is a number of tutorial (1..9)

./jq_tut.sh 1

--> cat doc.json
{
  "value": [
    {
      "releaseEnvironment": {
        "id": 1,
        "name": "___PRD___"
      }
    },
    {
      "releaseEnvironment": {
        "id": 2,
        "name": "___DEV___"
      }
    }
  ]
}

--> # selecionando o valor da chave "value" do objeto raiz
    cat doc.json | jq '.value'
[
  {
    "releaseEnvironment": {
      "id": 1,
      "name": "___PRD___"
    }
  },
  {
    "releaseEnvironment": {
      "id": 2,
      "name": "___DEV___"
    }
  }
]

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment