Como extrair o array de dentro do json para um arquivo txt separado

1

Eu tenho um arquivo .json que preciso extrair o campo SliceTiming de um arquivo txt separado. Eu não posso usar jq. Se eu pudesse, meu comando seria

jq .SliceTiming [] * .json

Aqui está o arquivo .json

{
"EchoTime": 0.033,
"RepetitionTime": 0.75,
"EffectiveEchoSpacing": 0.0005,
"SliceTiming": [
    0.51,
    0,
    0.365,
    0.0725,
    0.4375,
    0.2175,
    0.5825,
    0.2925,
    0.6575,
    0.145,
    0.51,
    0,
    0.365,
    0.0725,
    0.4375,
    0.2175,
    0.5825,
    0.2925,
    0.6575,
    0.145,
    0.51,
    0,
    0.365,
    0.0725,
    0.4375,
    0.2175,
    0.5825,
    0.2925,
    0.6575,
    0.145,
    0.51,
    0,
    0.365,
    0.0725,
    0.4375,
    0.2175,
    0.5825,
    0.2925,
    0.6575,
    0.145,
    0.51,
    0,
    0.365,
    0.0725,
    0.4375,
    0.2175,
    0.5825,
    0.2925,
    0.6575,
    0.145,
    0.51,
    0,
    0.365,
    0.0725,
    0.4375,
    0.2175,
    0.5825,
    0.2925,
    0.6575,
    0.145   ],
"PhaseEncodingDirection": "j-"}
    
por Noah 26.11.2018 / 18:52

2 respostas

1

Usando o Perl e o módulo JSON:

perl -MJSON -e 'print join("\n", @{decode_json(join("\n",<>))->{"SliceTiming"}})' <file.json

Isso gera cada número em uma linha separada sem vírgulas

    
por 26.11.2018 / 19:06
1

Ver como o python é permitido. Essa seria minha solução preferida.

Não me sinto à vontade para lidar com sed, grep, awk, pois não sei casos de borda sobre os dados.

Imprimir matriz com stdout

cat data.json | python -c "import sys, json; print json.load(sys.stdin)['SliceTiming']"

Nota: Este exemplo usa python2.7, improvável que funcione com python3.x

Apenas os valores emitidos. Não [] no , :

Criado slice_out.py porque não consegui encontrar uma boa maneira de fazer um terminal in-line

import sys, json
slice_data = json.load(sys.stdin)['SliceTiming']
for s in slice_data: print s

Ran com cat data.json | python slice_out.py

    
por 26.11.2018 / 19:00

Tags