ConvertFrom-Json PowerShell Cmdlet无法解析整个JSON对象

时间:2014-11-24 23:05:59

标签: json powershell

我在名为test.txt的文件中有这个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=}

有人有什么想法吗?

1 个答案:

答案 0 :(得分:11)

您想要的数据就在那里。您只需要导航“节点”(不知道正确的术语) 如果您将文件中的数据返回到变量并使用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可以帮助公开属性以向您显示数据结构。