J'ai une structure JSON dans un fichier my.json qui semble être similaire à celle ci-dessous: Utilisation de PowerShell, je souhaite rechercher un "nœud" ke1b et sélectionnez-le. Les hypothèses sont p> Si je pouvais connaître le parent sous lequel nœud clé1b est que je pourrais utiliser ci-dessous: p> Comment puis-je faire ci-dessus sélectionner générique de sorte que le nœud Je cherche peut être dans la racine ou un enfant de la racine? P> P>
3 Réponses :
Vous pouvez trouver Définissons votre JSON comme variable Nous recherchons Nous pouvons voir ici que tous les nœuds et leurs sous-nœuds sont répertoriés dans l'onglet Définitions, avec des Jsons plus gros, nous ne serions pas capable de voir l'onglet de définitions entière avec ceci afin que nous puissions traiter à l'une de ces deux choses: p> donc si nous voulons trouver qui trouve la définition dans laquelle où, comme vous pouvez le voir, le nœud parent est key1a code> ou quelle que soit la clé que vous recherchez en regardant la colonne de définition de Get-Member code>. $ Testjson code>: p> key1a code> dans $ testjson code> que nous ne savons pas est sous le nœud parent Key1 code>, nous pouvons le faire en examinant la sortie de $ testjson | gm code> p> key1a code> nous peut faire p> clé1a code> est (insensible à la casse spécifiée par -i code> de -c code>) qui nous donne la sortie de p> clé1 code> et Nous pouvons saisir cela aussi avec P> $($testJson).$(($testJson | gm | ? {$_.Definition -imatch "key1A"}).name).key1a
someKey
-------
someValue
# convert as a Hashtable
$json = Get-Content -Raw .\my.json | ConvertFrom-Json -AsHashtable
# a root element
$json.key1B
# a child of a root element
$json.Values.key1B
# descendant
function findByKey {
param($json, $key)
if ($json.$key) { $json.$key }
else {
$json.Values | ? values | % { findByKey $_ $key } | select -First 1
}
}
findByKey $json "key1B"
La seule chose est que cela nécessite PowerShell 7.
Votre JSON n'est pas syntaxiquement correct,
"key1" code> et"key2" code> n'a pas de fermeture} code>@Nekomusume désolé pour cela, corrigé-le.
Essayez
((get-Content -raw -raw my.json | Convertfrom-json) | GM |? {$ _. Définition -Imatch "Key1a"}). Nom code> Ceci obtiendra le noeud parent dekey1a code>A été capable de saisir du contenu de
key1a code> avec votre JSON comme$ testjson code> comme:$ ($ testjson | Convertfrom-json). $ ((($ (($ Testjson | ConvertFrom-Json) | GM |? {$ _. Définition "Key1a"}). Nom) .Key1a code> très convulué mais serait plus facile si j'avais une variable distincte avec le JSON converti, la preuve du concept bien que