2014-11-24 15 views
8

mam ten JSON w pliku o nazwie test.txtConvertFrom-Json komandletu PowerShell nie parsowania cały obiekt JSON

{ 
    "local-dev": { 
    "client": { 
     "server-url": "http://localhost:3000" 
    }, 
    "server": { 
     "renterEndpoint": { 
     "rejectUnauthorized": false, 
     "host": "blah.blah.com", 
     "port": 443, 
     "path": "/api/renter" 
     }, 
     "homeownerEndpoint": { 
     "rejectUnauthorized": false, 
     "host": "blah.blah.com", 
     "port": 443, 
     "path": "/api/homeowner" 
     } 
    } 
    } 
} 

Kiedy uruchomić tego polecenia PowerShell:

Get-Content "test.txt" -Raw | ConvertFrom-Json 

obecnie wprowadzone otrzymuję nie obejmuje żadnego z obiektów na drugim poziomie (tj. obiekty klienta i serwera nie mają właściwości).

local-dev 
--------- 
@{client=; server=} 

Ktoś ma jakieś pomysły?

Odpowiedz

8

Dane, które chcesz tam znaleźć. Musisz tylko nawigować w "węzłach" (nie znasz odpowiednich terminów) Jeśli zwrócisz dane z pliku do zmiennej i użyjesz Get-Member, zobaczysz to, czego szukasz.

PS C:\Users\Cameron> $json | Get-Member | Select-Object name 

Name                                                
----                                                
Equals                                                
GetHashCode                                              
GetType                                               
ToString                                               
local-dev  

Pozwala zobaczyć, co jest w lokalnym-dev. zanotuj cytaty z nieruchomości. Potrzeba programu PowerShell, aby traktował to jako ciąg znaków, w przeciwnym razie wystąpią błędy parsowania.

PS C:\Users\Cameron> $json."local-dev" 

client          server          
------          ------          
@{server-url=http://localhost:3000}   @{renterEndpoint=; homeownerEndpoint=} 

Niech podróżować nieco dalej

PS C:\Users\Cameron> $json."local-dev".server.renterEndpoint 

    rejectUnauthorized host          port path     
    ------------------ ----          ---- ----     
       False blah.blah.com        443 /api/renter 

Jestem pewien, że istnieją inne sposoby na pozyskiwanie danych, którego szukasz. Dopiero niedawno zacząłem na to patrzeć. Chodzi o to, że jeśli wiesz, czego szukasz, po prostu użyj właściwości obiektu, aby uzyskać to, czego potrzebujesz. Jeśli ta wiedza nie jest ci znana, może pomóc w ujawnieniu właściwości, aby pokazać strukturę danych.

+0

Dzięki Matt! Po prostu nie było oczywiste, że dane tam są. – dprothero

+0

@dprothero Zgoda. Wydawało mi się, że to musiało gdzieś być :) – Matt

+7

Dobra odpowiedź .. FYI, po tym, jak zostałem ugryziony, używam jednej sztuczki, żeby potwierdzić takie rzeczy .. 'ConvertTo-Json $ json -Depth 10' i to pokaże poprawne i cała struktura (Głębokość 10, można użyć większej liczby), ładnie sformatowana. –

Powiązane problemy