2014-11-24 171 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