【问题标题】:PowerShell convert string to jsonPowerShell 将字符串转换为 json
【发布时间】:2015-10-19 15:09:07
【问题描述】:

在 PowerShell 中,我有以下字符串,我从文件中读取并需要转换为 json:

"@{Account='User01';Domain='Domain01';Admin='True'}"

在我的 PS 脚本中,我尝试这样做(简化):

$myStr = "@{Account='User01';Domain='Domain01';Admin='True'}" | ConvertTo-Json
$mystr

myStr 的结果是:

"@{Account=\u0027User01\u0027;Domain=\u0027Domain01\u0027;Admin=\u0027True\u0027}"

而不是我可以使用的 json。请注意,字符串开头的@ 符号是我从文件中得到的。

如何将其转换为我可以使用的对象?

【问题讨论】:

    标签: json powershell


    【解决方案1】:

    您可以尝试一些字符串操作以将其转换为预期的 JSON 格式,然后使用 ConvertFrom-Json 将其转换为 PSCustomObject

    简单示例:(简单,因为这假设这些被替换的字符将只是分隔符)

    # First, clean up the string.
    PS C:\> $mystring = "@{Account='User01';Domain='Domain01';Admin='True'}"
    PS C:\> $mystring = $mystring -replace "^@", ""
    PS C:\> $mystring = $mystring -replace "=", ":"
    PS C:\> $mystring = $mystring -replace ";", ","
    PS C:\> $mystring
    {Account:'User01',Domain:'Domain01',Admin:'True'}
    
    # Afterwards, convert to PSCustomObject.
    PS C:\> $myobject = $mystring | ConvertFrom-Json
    PS C:\> $myobject
    
    Account                                 Domain                                  Admin
    -------                                 ------                                  -----
    User01                                  Domain01                                True
    

    这也可以转换回 JSON:

    PS C:\> $myobject | ConvertTo-Json
    {
        "Account":  "User01",
        "Domain":  "Domain01",
        "Admin":  "True"
    }
    

    【讨论】:

      【解决方案2】:

      以上适用于深度最多为2的Json或PS对象。如果您的对象包含嵌套对象,则需要指定-Depth参数。

          PS C:\> $json=
          '{
             "level1":[
                {
                   "attr1":"value1",
                   "level2":[
                      {
                         "attr2.1":"value2.1",
                         "attr2.2":"value2.2"
                      }
                   ]
                }
             ],
             "Comment":"3-level object"
          }'
          
          PS C:\> $psobj = ConvertFrom-Json $json
          
          PS C:\> $psobj
          
          level1                                    Comment       
          ------                                    -------       
          {@{attr1=value1; level2=System.Object[]}} 3-level object
          
          
          
          PS C:\> Convertto-Json $psobj
          {
              "level1":  [
                             {
                                 "attr1":  "value1",
                                 "level2":  ""
                             }
                         ],
              "Comment":  "3-level object"
          }
          
          PS C:\> Convertto-Json $psobj -Depth 3
          {
              "level1":  [
                             {
                                 "attr1":  "value1",
                                 "level2":  [
                                                "@{attr2.1=value2.1; attr2.2=value2.2}"
                                            ]
                             }
                         ],
              "Comment":  "3-level object"
          }
          
          PS C:\> Convertto-Json $psobj -Depth 4
          {
              "level1":  [
                             {
                                 "attr1":  "value1",
                                 "level2":  [
                                                {
                                                    "attr2.1":  "value2.1",
                                                    "attr2.2":  "value2.2"
                                                }
                                            ]
                             }
                         ],
              "Comment":  "3-level object"
          }
      
      

      你可能猜到了,Depth 的默认值是2

      【讨论】:

        猜你喜欢
        • 2013-03-02
        • 1970-01-01
        • 2014-10-08
        • 2021-01-22
        • 2018-06-28
        • 2012-01-15
        • 2012-10-06
        • 1970-01-01
        相关资源
        最近更新 更多