J'ai un fichier JSON que j'utilise pour le travail que je dois analyser ce qui est dans le format suivant:Impossible d'obtenir JQ de reconnaître un tableau dans un fichier JSON
(^)#(^)#(^)#(^)[email protected]:~$ cat jqtest
{
"files":[
{
"BLOCK1":{
"SUBBLOCK1":{
"akey1":"avalue1",
"bkey1":"bvalue1",
"ckey1":"cvalue1"
},
"dkey1":"dvalue1",
"key":"evalue1"
}
},
{
"BLOCK-2":{
"SUBBLOCK2":{
"akey2":"avalue2",
"bkey2":"bvalue2"
},
"ckey2":"cvalue2",
"key":"dvalue2"
}
},
{
"BLOCK-A":{
"SUBBLOCK2":{
"akey2":"avalue2",
"bkey2":"bvalue2"
},
"ckey2":"cvalue2",
"key":"dvalue2"
}
}],
"NOBLOCK":"value",
"key":"NOBLOCKvalue"
}
Il est donc un tableau imbriqué dans un fichier json. jq .[] jqtest
me donne tout dans le fichier. Même les données en dehors du tableau. Sauf, en dehors du tableau, je ne compte tenu des valeurs pas les clés:
(^)#(^)#(^)#(^)[email protected]:~$ jq .[] jqtest
[
{
"BLOCK1": {
"SUBBLOCK1": {
"akey1": "avalue1",
"bkey1": "bvalue1",
"ckey1": "cvalue1"
},
"dkey1": "dvalue1",
"key": "evalue1"
}
},
{
"BLOCK-2": {
"SUBBLOCK2": {
"akey2": "avalue2",
"bkey2": "bvalue2"
},
"ckey2": "cvalue2",
"key": "dvalue2"
}
},
{
"BLOCK-A": {
"SUBBLOCK2": {
"akey2": "avalue2",
"bkey2": "bvalue2"
},
"ckey2": "cvalue2",
"key": "dvalue2"
}
}
]
"value"
"NOBLOCKvalue"
(^)#(^)#(^)#(^)[email protected]:~$
Au-delà, je ne peux pas accéder à un bloc à l'intérieur du tableau:
(^)#(^)#(^)#(^)[email protected]:~$ jq '.[].BLOCK1' jqtest
jq: error (at jqtest:36): Cannot index array with string "BLOCK1"
(^)#(^)#(^)#(^)[email protected]:~$ jq '.[].BLOCK-2' jqtest
jq: error (at jqtest:36): Cannot index array with string "BLOCK"
(^)#(^)#(^)#(^)[email protected]:~$ jq '.[].BLOCK-A' jqtest
jq: error: A/0 is not defined at <top-level>, line 1:
.[].BLOCK-A
jq: 1 compile error
(^)#(^)#(^)#(^)[email protected]:~$
Comment puis-je accéder au tableau ?
Le tableau est assis dans la propriété 'files' ... accéder au' files' propriété ... '.files' –
' jq '.files | [] | .BLOCK1 'jqtest' fonctionne. 'jq '.files | [] | .BLOCK-2 'jqtest' donne cette erreur: 'jq: erreur (at jqtest: 36): null (null) et le nombre (2) ne peut pas être soustrait'. 'jq '.files | [] | .BLOCK-A 'jqtest' donne cette erreur: 'jq: erreur: A/0 n'est pas défini à, ligne 1:/.files | [] | .BLOCK-A/jq: 1 erreur de compilation ». –
Lors de l'utilisation de la syntaxe '.name', les noms doivent suivre les règles de dénomination d'identifiant habituelles trouvées dans la plupart des langages de programmation. '-' n'est pas un caractère d'identification valide, vous devez utiliser la syntaxe d'index d'objet:'. "BLOCK-A" 'ou'. ["BLOCK-A"] '. –