2014-11-24 27 views
8

我有這樣的JSON在一個名爲test.txt的ConvertFrom JSON的PowerShell命令不解析整個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" 
     } 
    } 
    } 
} 

當我運行此PowerShell命令:

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

的出來把我弄不包括第二級下的任何對象(即客戶端和服務器對象沒有屬性)。

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

任何人有什麼想法?

回答

8

你想要的數據就在那裏。您只需瀏覽「節點」(不知道正確的條款) 如果您將文件中的數據返回到變量並使用Get-Member,則可以看到您要查找的內容。

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

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

讓我們看看本地開發中有什麼。注意財產周圍的報價。需要PowerShell將其視爲字符串,否則您將得到解析錯誤。

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

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

讓我們出行更遠一點

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

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

我敢肯定還有其他的方法來提取您正在尋找的數據。最近我纔開始看這個。要點是,如果你知道你在找什麼,只需使用對象的屬性來獲得你所需要的。如果您不知道該知識Get-Member可以幫助公開屬性以向您顯示數據結構。

+0

謝謝馬特!數據在那裏並不明顯。 – dprothero 2014-11-25 03:32:31

+0

@dprothero同意。只是好像它必須在那裏:) – Matt 2014-11-25 03:33:15

+7

好的答案..僅供參考,已經被咬了自己,我用一個技巧來確認這些事情..'ConvertTo-Json $ json -Depth 10',它會顯示正確的和整個結構(深度10,可以使用更高的數字),很好地格式化。 – 2014-11-26 01:58:02