2013-07-29 14 views
27

Mam problem z ConvertTo-Json i próbowałem zrozumieć zachowanie i/lub co robię źle.Powershell ConvertTo-json z osadzonym hashtable

Rozważmy następujący ciąg poleceń:

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

Pierwszy konwersji daje to wyjście:

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

Druga konwersja daje to wyjście:

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

Wydaje się, że w przypadek tablicy konwersja jest niepoprawna. Jakieś pomysły na to, dlaczego tak się dzieje?

Odpowiedz

45

To kłopoty z głębokości, wartość domyślna wynosi 2, można spróbować:

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

Nicea, spędziłem Dobry kawał dzisiejszego dnia próbuje dowiedzieć się, dlaczego niektóre JSON na głębokości 3 wychodziło jako "@ {name = 1.0}". Zadałem nawet pytanie i wszystko, zanim w końcu spotkałem się z tym częściowo z powodu wypadku. – Ellesedil

+0

Czy istnieje sposób określenia "nieskończonej głębokości"? –

+0

Nie mogę znaleźć żadnych informacji na ten temat w dokumentacji Microsoft. Nigdy nie testuję więcej niż 6. "Nieskończona głębia" jest teoretyczna, czy naprawdę potrzebujesz więcej niż 32. – JPBlanc

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

określa nieskończoną głębię (maksymalna możliwa do ConvertTo-Json cmdletu)

+0

ConvertTo-Json: Maksymalna głębokość dozwolona do serializacji to 100. – Nick

+0

Korzystanie większe wartości niż potrzebna generuje całkowicie głupie wyniki wydajności. Nawet nie idź tam –

+0

@ConradB Zastanawiasz się ... Czy wiesz o tym za fakt? Zakładam, że tak będzie, ponieważ wyjaśnia on, dlaczego jest parametr Depth, ale czy uruchomiłeś testy? – PhilAI