J'analyse un fichier json avec jq:
jq .response[1].text file.json
Cela fonctionne bien, mais chaque fois que je dois entrer le nombre .response [2] .text, .response [3] .text etc. Je veux obtenir toutes les valeurs à la fois (200 valeurs)
Mais quand je fais:
jq .response[].text file.json
Il donne une erreur: impossible d'indexer le numéro avec la chaîne "texte"
Le fichier ressemble à ceci:
{
"response": [
1000,
{
"id": ,
"date": ,
"owner_id": ,
"from_id": ,
"post_type": "post",
"text": "blabla",
"attachment": {
"type": "photo",
"photo": {
"pid": ,
"aid": -7,
"owner_id":
}
},
"attachments": [
{
"type": "photo",
"photo": {
}
},
{
"type": "link",
"link": {
"url": "",
"title": "",
"description": "",
"target": "external"
}
}
],
"post_source": {
"type": "vk"
},
"comments": {
"count": 0,
"groups_can_post": true,
"can_post": 1
},
},
{
"id": ,
"date": ,
"owner_id": ,
"from_id": ,
"post_type": "post",
"text": "blabla",
"attachment": {
"type": "link",
"link": {
"url": "",
"title": "",
"description": "",
"target": "external",
"
}
De toute évidence, l'un des éléments du tableau est une chaîne. Si votre jq prend en charge "?", Alors une possibilité serait de l'utiliser:
.response[].text?
Un autre serait de vérifier le type explicitement, par exemple:
.response[] | objects | .text
Encore une autre possibilité:
.response[] | select(type=="object" and has("text")) | .text
Si vous souhaitez avoir une valeur d'espace réservé lorsqu'il n'y a pas de champ "texte":
.response[] | if type=="object" and has("text") then .text else null end
Cela dépend donc vraiment de vos besoins et peut-être de la version de jq que vous utilisez.