J'essaie de Parson le fichier JSON pour obtenir des valeurs spécifiques et .Items [] nom du dictionnaire dans le même fichier.
fichier source.json: https://jqplay.org/s/0-o4hoox- K p> Sortie attendue: p> J'ai regardé autour des threads similaires et testé au hasard sur jqplay mais ne peut tout simplement pas obtenir la sortie. P> p>
3 Réponses :
Utilisation Voici une solution assez étroite pour vous: p> Vous pouvez facilement l'installer via votre gestionnaire de packages commun:
sudo yum install -y jq code> pour des distributions basées sur RPM (comme redhat) ou sudo apt-get install -y jq code> pour Debian (Ubuntu, etc.); p> p>
Ce n'est pas une solution Bash, mais un JS One.
Le snippet ci-dessous crée un objet qui a les noms de base de données sous forme de touches (regardez dans la console): p>
p>
const data = {
"name": "ABC Company",
"assetbase": [{
"name": "Added assets from API",
"type": "access-section",
"assetbase": [{
"name": "Database A",
"asset-number": 1,
"items": ["0ABC-001", "0ABC-003", "0ABC-004"]
}, {
"name": "Database B",
"asset-number": 2,
"items": ["0ABC-001"]
}, {
"name": "Database C",
"asset-number": 3,
"items": ["0ABC-002", "0ABC-003"]
}]
}],
"objects-dictionary": [{
"uid": "0ABC-001",
"name": "Cluster A"
}, {
"uid": "0ABC-002",
"name": "Cluster B"
}, {
"uid": "0ABC-003",
"name": "Unit-001"
}, {
"uid": "0ABC-004",
"name": "Unit-002"
}]
}
const mapAssets = (assetbase, dictionary) => {
const ret = assetbase.reduce((a, c) => {
if (typeof a[c.name] === "undefined") a[c.name] = []
a[c.name].push(c.name)
c.items.forEach(e => {
const {
name
} = dictionary.find(el => {
return el.uid === e
})
a[c.name].push(name)
})
return a
}, {})
return ret
}
const mapped = mapAssets(data.assetbase[0].assetbase, data["objects-dictionary"])
console.log('mapped:', mapped) Pure JQ code> solution: jq -r '([(."objects-dictionary"[] | {key:.uid, value:.name})] | from_entries
) as $obj
| .assetbase[] | .assetbase[]
| [.name, (.items[] as $i | $obj[$i])]
| @csv' < file.json
Solution concise et belle, merci monsieur de partager.
Premièrement, veuillez ajouter le code que vous avez écrit pour résoudre ceci à la question afin que nous puissions vous aider à le déboguer. Deuxièmement, la sortie attendue n'est pas une structure de données valide.