2017-10-16 3 views
0

Je suis nouveau à Powershell. J'ai le script PS suivant. J'essaie de déterminer le "code" powershell pour identifier lequel, le cas échéant, "field" est un tableau ou hashtable. Le texte source est un fichier json.Essayer d'identifier le type d'élément PS Object dans le code

$txt = @" 
{ 
    "id": "02002010", 
    "booktitle": "", 
    "pagetitle": "Demo Page", 
    "parent": "02002000", 
    "img": [ 
    { 
     "imgfile": "02A.png", 
     "imgname": "02A.png" 
    } 
    ], 
    "fmt": "", 
    "entries": [ 
    { 
     "itemid": "1", 
     "partnumber": "1234567", 
     "partdescription": "Washer", 
     "partqty": "2", 
     "Manufacturer": "ACME", 
     "TYPE": "Stainless", 
     "partdescriptionlocal": "Washer" 
    }, 
    { 
     "itemid": "2", 
     "partnumber": "98765-B", 
     "partdescription": "Screw", 
     "partqty": "8", 
     "Manufacturer": "Widget Inc", 
     "TYPE": "Galv", 
     "partdescriptionlocal": "Screw" 
    }] 
} 
"@ 
$json= ConvertFrom-Json -inputobject $txt 
foreach($pct in $json) { 
$pct} 

La sortie du script est

id  : 02002010 
booktitle : 
pagetitle : Demo Page 
parent : 02002000 
img  : {@{imgfile=02A.png; imgname=02A.png}} 
fmt  : 
entries : {@{itemid=1; partnumber=1234567; partdescription=Washer; partqty=2; Manufacturer=ACME; TYPE=Stainless; 
      partdescriptionlocal=Washer}, @{itemid=2; partnumber=98765-B; partdescription=Screw; partqty=8; 
      Manufacturer=Widget Inc; TYPE=Galv; partdescriptionlocal=Screw}} 

Ma question:

Quelle propriété/paramètre ??? identifie img, et entrées comme "champs" dont les valeurs sont des tableaux ??? J'essaie d'identifier de tels champs (sous-réseaux) en utilisant PS sans connaître explicitement chaque nom de champ.

Merci d'avance.

Répondre

1

La propriété .basetype de la méthode .gettype() vous donnera que:

json= ConvertFrom-Json -inputobject $txt 
foreach($pct in $json) { 
$pct.psobject.properties.name | 
foreach-object { 
    [PSCustomObject]@{ 
    Property = $_ 
    Type = $pct.$_.gettype().basetype 
    } 
} 
} 

Property Type   
-------- ----   
id  System.Object 
booktitle System.Object 
pagetitle System.Object 
parent System.Object 
img  System.Array 
fmt  System.Object 
entries System.Array 
+0

Ou ils pourraient simplement utiliser la propriété TypeNameOfValue des annonces Propriétés du psobject, et rappelez-vous que tout ce qui se termine par '[]' est un tableau : '$ json.psobject.Properties | FT Nom, TypeNameOfValue' – TheMadTechnician

+0

Merci à vous deux mjolinor et TheeMatechnician. Puis-je demander un autre aspect? Existe-t-il une technique simple pour identifier uniquement les éléments qui ont la propriété System.array. Autrement dit, quel que soit le fichier json, puis-je identifier les éléments/champs qui ont la propriété system.array? – Orange

+0

Désolé pour l'orthographe TheMadTechnician --- clés collantes et pas assez de commentaires. J'ai découvert $ json.psobject.Properties | où typenameofvalue -eq "system.object []" | ft nom, typenameofvalue pour obtenir Nom TypeNameOfValue ---- --------------- img System.Object [] entries System.Object [] – Orange