如何在 PowerShell 中创建 JSON?

Nik*_*son 13 powershell

如何在 PowerShell 中创建 Json?
我认为这与在 PowerShell 中创建 Xml 类似,但它不起作用:

[Json]$MyJsonVariable = @"
{
  "MyList"{
    "Item1" {
      "Name": "AMD Ryzen 5 3600x"
      "Type":"CPU"
      "Price":"`$69.99"
      "Where":"Amazon.com"
    }
  }
}
"@
Run Code Online (Sandbox Code Playgroud)

但这没有用:

Unable to find type [Json].
At line:1 char:1
+ [Json]$MyJsonVariable = @"
+ ~~~~~~
    + CategoryInfo          : InvalidOperation: (Json:TypeName) [], RuntimeException
    + FullyQualifiedErrorId : TypeNotFound
Run Code Online (Sandbox Code Playgroud)

请帮助

小智 21

尝试一下:

$MyJsonHashTable = @{
  'MyList' = @{
    'Item1' = @{
      'Name' = 'AMD Ryzen 5 3600x'
      'Type' = 'CPU'
      'Price' = '$69.99'
      'Where' = 'Amazon.com'
    }
  }
}

$MyJsonVariable = $MyJsonHashTable | ConvertTo-Json

$err = $null
$MyJsonObject = [Microsoft.PowerShell.Commands.JsonObject]::ConvertFromJson($MyJsonVariable, [ref]$err)
Run Code Online (Sandbox Code Playgroud)

结果是$MyJsonVariable包含 Json 字符串的 a:

{
    "MyList":  {
                   "Item1":  {
                                 "Price":  "$69.99",
                                 "Where":  "Amazon.com",
                                 "Name":  "AMD Ryzen 5 3600x",
                                 "Type":  "CPU"
                             }
               }
}
Run Code Online (Sandbox Code Playgroud)

以及$MyJsonObject包含 Json 对象引用的 a:

MyList
------
@{Item1=}
Run Code Online (Sandbox Code Playgroud)

我怀疑这 3 个 PowerShell 变量之一应该适合您的 Json 需求。

希望这可以帮助。


Nic*_*oru 13

与其他答案所示一样,您可以使用 PowerShell 哈希表作为 JSON,但是,PowerShell 确实有一种使用 JSON 的方法。

首先,即使 Powershell 中有 JSON 数据类型,您仍然会收到 JSON 语法错误。您的 JSON 应该如下所示:

$MyJsonVariable = @"
{
  "MyList":{
    "Item1":{
      "Name":"AMD Ryzen 5 3600x",
      "Type":"CPU",
      "Price":"`$69.99",
      "Where":"Amazon.com"
    }
  }
}
"@
Run Code Online (Sandbox Code Playgroud)

请注意大括号前的逗号和冒号。

定义此变量后,我们可以使用ConvertFrom-JSONcmdlet 将其转换为实际的 JSON:

$MyJsonVariable = $MyJsonVariable | ConvertFrom-JSON
Run Code Online (Sandbox Code Playgroud)

这会将其转换为 JSON:

PS C:\> $MyJsonVariable.MyList

Item1
-----
@{Name=AMD Ryzen 5 3600x; Type=CPU; Price=$69.99; Where=Amazon.com}


PS C:\> $MyJsonVariable.MyList.Item1

Name              Type Price  Where
----              ---- -----  -----
AMD Ryzen 5 3600x CPU  $69.99 Amazon.com


PS C:\> $MyJsonVariable.MyList.Item1.Where
Amazon.com
Run Code Online (Sandbox Code Playgroud)

要查看它的结构,您可以使用 cmdlet ConvertTo-JSON

PS C:\> $testjson | ConvertTo-Json
{
    "MyList":  {
                   "Item1":  {
                                 "Name":  "AMD Ryzen 5 3600x",
                                 "Type":  "CPU",
                                 "Price":  "$69.99",
                                 "Where":  "Amazon.com"
                             }
               }
}
Run Code Online (Sandbox Code Playgroud)