2016-06-20 1 views
0

Pour JSON comme ceci:Accès aux valeurs dans une propriété d'objets PS personnalisé généré à partir JSON

{ 
"Tours": [{ 
    "Code": "r", 
    "Name": "Tour 1", 
    "Tournaments": [{ 
     "Number": "464", 
     "Title": "Open Tournament 1" 
    }, 
    { 
     "Number": "047", 
     "Title": "Open Tournament 2" 
    }] 
}, 
{ 
    "Code": "s", 
    "Name": "Tour 2", 
    "Tournaments": [{ 
     "Number": "524", 
     "Title": "Tournament 3" 
    }, 
    { 
     "Number": "009", 
     "Title": "Tournament 4" 
    }] 
}] 
} 

lorsqu'il est converti en un objet PS personnalisé et enregistré dans la variable de données $, je peux accéder aux valeurs sous « Tournois » pour spécifique « Tours » comme celui-ci:

$data.Tours[0].Tournaments 
$data.Tours[1].Tournaments 

Mais, est-il possible d'accéder aux propriétés et valeurs « Tournois » en spécifiant « code » ou des valeurs « Nom » sous « » Tours? Quelque chose comme ça, peut-être:

$data.Tours.Code['r'].Tournaments 

En fait, dans un script PS Je veux filtrer les données par « Code » sous la rubrique « Tours » et d'obtenir sous-jacente « Tournois » (get « Tournois » pour « Code » spécifique du 'Tours').

+0

'$ données.Tours |? Code -eq r |% Tournois' – PetSerAl

+0

@PetSerAl, merci! Mais est-il possible de se référer directement aux 'Tournois' en utilisant la notation JSON et en spécifiant la valeur 'r' pour le 'Code' sous 'Tour'? – YMM

+0

* se référer directement aux 'Tournois' en utilisant la notation JSON * JSON inclut-il un langage de requête comme XPath pour XML? Je ne suis pas au courant d'une telle chose. – PetSerAl

Répondre

0

Vous devez faire quelque chose comme:

$data.Tours | Where-Object { $_.Code -eq 'r' } | Select-Object -ExpandProperty 'Tournaments' 

Pour obtenir la liste des codes concaténés et numéros de tournois (où le code est "r"), vous pouvez faire:

$data.Tours | Where-Object { $_.Code -eq 'r' } | ForEach-Object { $Code = $_.Code; $_.Tournaments | ForEach-Object { $Code + $_.Number }} 
+0

Merci! Si je redirige votre commande vers ForEach-Object, serai-je en mesure de me référer à la valeur .Code de Where-Object? Par exemple, si j'ai besoin de concaténer 'Code' avec 'Tournaments.Number' dans le bloc de code ForEach-Object. – YMM

+0

Juste mis à jour ma réponse quel code qui devrait le faire pour vous –

+0

Excellent! Merci, Chris! – YMM