Usando o JQ para obter uma saída delimitada simples

3

Como se pode mudar isso:

{
  "write": {
    "out": 0,
    "available": 128,
    "totalTickets": 128
  },
  "read": {
    "out": 7,
    "available": 249,
    "totalTickets": 256
  }
}

Para

0 128 128 7 249 256

Usando jq?

    
por SpooForBrains 01.02.2017 / 17:57

2 respostas

3

Você também pode recursivamente descer sua árvore JSON assim:

>jq 'recurse|numbers' data.json
0
128
128
7
249
256

(isto assume que todos os seus valores são números , use escalares se você também quiser booleanos e strings)

Ou use uma notação abreviada para recurse , que é ..

..|numbers

(Obrigado @cuonglm!)

Note que, ao contrário da abordagem map | flatten , isso também funcionará para uma árvore de objetos aninhada e arbitrária.

Por exemplo,

{
  "write": {
    "out": 0,
    "available": 128,
    "totalTickets": 128
  },
  "read": {
    "out": 7,
    "available": 249,
    "totalTickets": 256,
    "details" : {
        "good": 10,
        "bad" : 20
    }
  }
}

produzirá:

0
128
128
7
249
256
10
20
    
por 01.02.2017 / 18:28
1
$ jq 'map(map(values))|flatten|.[]' data.json
0
128
128
7
249
256

A primeira parte gera

[
  [
    0,
    128,
    128
  ],
  [
    7,
    249,
    256
  ]
]

Isso está achatado em:

[
  0,
  128,
  128,
  7,
  249,
  256
]

E o .[] extrai esses valores.

    
por 01.02.2017 / 18:25

Tags