{
"content": [
{
"Title": "abc",
"brand": "xyz",
"size": "5 g",
"date": "2019-01-01",
"details": {
"Temperature": [
{
"value": "90",
"characteristics":"Normal"
},
{
"value":"100",
"characteristics":"high"
},
{
"value":"80",
"characteristics":"low"
}
],
"certifications": [
{
"value": "based",
"characteristics":"pass"
},
{
"value": "50",
"characteristics":"failed"
}
]
},
"formats": {
"city": "NYC",
"id": "007",
"manufacture":""
},
"innerDetails": [
{
"contains": "abc",
"panel":"xyz",
"values":[
{
"name":"abc",
"value":"10"
},
{
"name":"xyz",
"value":"20"
}
]
}
]
}
]
}
Eu tentei a abordagem abaixo, mas recebendo o erro
Não é possível indexar a matriz com a string "Título"
jq -r '.content[]|[.Title,.brand,.characteristics,.value]' $jsonfile.
Eu estava tentando na mesma linha com outras seções, mas recebendo o mesmo erro.
Como resolvo esse problema?
Saída esperada:
abc,xyz,90,Normal.
abc,xyz,100,high.
abc,xyz,80,low
Você não está recebendo
Cannot index array with string "Title"
com esse comando, você está recebendojá que não existe
characteristics
ouvalue
chave nos objetos docontents
array (são chaves no.details.Temperature
sub-array).O comando que lhe daria essa mensagem é:
ou
Perder a
content
pesquisa de chave, ou não obter os elementos dacontent
matriz, produz uma matriz de um objeto em vez do próprio objeto. E você não pode indexar um array com uma string.Supondo que você queira a saída CSV:
O
<object(s)> as <variable>
funciona como um loop emjq
, então o que acontece aqui é que$t
será atribuído cada elemento de.details.Temperature[]
por sua vez, e para cada elemento, um novo array é construído. A matriz é passada pela@csv
qual produzirá linhas formatadas em CSV.jq
sempre colocará aspas duplas nos campos de sua saída CSV. Para se livrar de citações desnecessárias :(
csvformat
faz parte decsvkit
)Ou você pode usar
@tsv
no lugar de@csv
para obter saída delimitada por tabulação.