如何从来自JSON数据的PowerShell对象中选择特定数据?

时间:2019-01-18 04:17:32

标签: json powershell

我已经导入了一些JSON数据并将其转换为PowerShell对象。我想了解如何检索所述数据的特定部分。

test.json:

{
  "Table": {
    "Users": {
      "Columns":   [ "[Id]", 
                       "[FName]",
                       "[MName]", 
                       "[SName]", 
                       "[UName]",
                       "[Pasword]" ],
      "data": "CustomUserData"
      },




    "Roles": { 
      "Columns": [ "[Id]",
                   "[Role]",
                   "[Description]" ],
        "data": "CustomRoleData"
                            }
              }
 }

导入PS对象:

$userdata = Get-Content .\test.json |ConvertFrom-Json

检索和格式化列数据:

PS> $userdata = Get-Content ./test.json |ConvertFrom-Json
PS> $columns = $userdata.Table.Users.Columns -join ","
PS> $columns
[Id],[FName],[MName],[SName],[UName],[Pasword]

检索自定义数据的示例:

PS> $userdata.Table.Users.data
CustomUserData

我想做的是:

  1. 仅选择表名称。当我尝试通过致电$userdata.table来执行此操作时,我得到以下信息:
PS> $userdata.Table |Format-List


Users : @{Columns=System.Object[]; data=CustomUserData}
Roles : @{Columns=System.Object[]; data=CustomRoleData}

我要查找的只是表名列表,在这种情况下-Users,Roles

  1. 我还想知道如何利用它来创建一个ForEach循环,该循环遍历每个表名并打印与每个表关联的列-最终,我将使用它来编写SQL查询。

谢谢!

1 个答案:

答案 0 :(得分:0)

也许这可以帮助您。 递归输出属性名称是一个小功能。

function Get-Properties($obj, [int]$level = 0) {
    $spacer = " "*$level
    $obj.PSObject.Properties | ForEach-Object { 
        $spacer + $_.Name
        if ($_.Value -is [PSCustomObject]){
            Get-Properties $_.Value ($level + 2)
        }
    }
}

根据您的情况,您可以像这样使用它:

$userdata = Get-Content ./test.json | ConvertFrom-Json
Get-Properties $userData

控制台输出将如下所示:

Table
  Users
    Columns
    data
  Roles
    Columns
    data