2013-07-29 3 views
27

Sto avendo un problema con ConvertTo-Json e stavo cercando di capire il comportamento e/o quello che sto facendo male.Powershell ConvertTo-json con hashtable incorporato

Considerate questa sequenza di comandi:

[email protected]{ID=10;[email protected]{ID=11;[email protected]{ID=12;Config='end'}}} 
ConvertTo-json $val 
ConvertTo-json @($val) 

La prima conversione dà questo output:

{ 
    "ID": 10, 
    "Config": { 
        "ID": 11, 
        "Config": { 
            "ID": 12, 
            "Config": "end" 
           } 
       } 
} 

La seconda conversione dà questo output:

[ 
    { 
     "ID": 10, 
     "Config": { 
         "ID": 11, 
         "Config": "System.Collections.Hashtable" 
        } 
    } 
] 

Sembra che nel caso matrice la conversione non è corretta. Qualche idea sul perché questo sta accadendo?

risposta

45

Si tratta di un problema con la profondità, il valore predefinito è 2, si può provare:

ConvertTo-json @($val) -Depth 5 
+1

Nizza, trascorso un buona fetta del giorno oggi cercando di capire perché alcuni JSON alla profondità 3 uscivano come '" @ {nome = 1.0} "'. Ho persino fatto una domanda e tutto, prima di arrivare finalmente inosservato. – Ellesedil

+0

Esiste un modo per specificare "profondità infinita"? –

+0

Non riesco a trovare alcuna informazione a riguardo nella documentazione Microsoft. Non ho mai testato più di 6. Una "profondità infinita" è teorica, ne hai davvero bisogno più di 32. – JPBlanc

0
-Depth $([int32]::MaxValue) 

specifica profondità infinita (massimo possibile per ConvertTo-JSON cmdlet)

+0

ConvertTo-Json: la profondità massima consentita per la serializzazione è 100. – Nick

+0

Utilizzo valori più grandi del necessario producono successi di prestazioni totalmente stupidi. non ci andate nemmeno –

+0

@ConradB Mi chiedo solo ... Lo sai per certo? Ho pensato che sarebbe il caso in quanto spiega perché c'è un parametro Depth, ma hai eseguito test? – PhilAI