ConvertTo-JSON插入调试信息

时间:2019-05-23 16:49:59

标签: json powershell

在准备供Invoke-RestMethod调用使用的主体数据时,我创建了一个PSCustomObject,目的是将其转换为JSON-这样做的好处是允许我以简洁明了的方式创建数据对象,并且然后让ConvertTo-JSON为我处理JSON格式。

无论如何,我注意到一个对象在Powershell(或底层的.NET类?)正在将看起来像调试信息的东西插入生成的JSON对象的意义上特别容易出现问题。

PSCustomObject代码

    $importCommitBodyObj = [PSCustomObject]@{
        delete_after_import        = "0"
        file_description           = $null
        file_title                 = $null
        import_source              = @{name="Me"; status=@{name="Shareable"}}
        file_type                  = "6"
        global_status              = "1"
        apply_attributes           = {@{name="Family"; value="Smith"; sources={@{name="Me"; status=@{name="Shareable"}}}}}
    }

在控制台中查看的PSCustomObject

PS C:\> $importCommitBodyObj


delete_after_import : 0
file_description    : 
file_title          : 
import_source       : {name, status}
file_type           : 6
global_status       : 1
apply_attributes    : @{name="Family"; value="Smith"; sources={@{name="Me"; status=@{name="Shareable"}}}}

转换为JSON后的对象

PS C:\> $importCommitBodyObj | ConvertTo-Json
{
    "delete_after_import":  "0",
    "file_description":  null,
    "file_title":  null,
    "import_source":  {
                          "name":  "Me",
                          "status":  {
                                         "name":  "Shareable"
                                     }
                      },
    "file_type":  "6",
    "global_status":  "1",
    "apply_attributes":  {
                             "Attributes":  [

                                            ],
                             "File":  null,
                             "IsFilter":  false,
                             "IsConfiguration":  false,
                             "Module":  null,
                             "StartPosition":  {
                                                   "Content":  "{@{name=\"Family\"; value=\"Smith\"; sources={@{name=\"Me\"; status=@{name=\"Shareable\"}}}}}",
                                                   "Type":  19,
                                                   "Start":  377,
                                                   "Length":  85,
                                                   "StartLine":  8,
                                                   "StartColumn":  38,
                                                   "EndLine":  8,
                                                   "EndColumn":  123
                                               },
                             "DebuggerHidden":  false,
                             "Id":  "0fae92d5-6e02-472c-b040-a6bcbb495c6d",
                             "Ast":  {
                                         "Attributes":  "",
                                         "UsingStatements":  "",
                                         "ParamBlock":  null,
                                         "BeginBlock":  null,
                                         "ProcessBlock":  null,
                                         "EndBlock":  "@{name=\"Family\"; value=\"Smith\"; sources={@{name=\"Me\"; status=@{name=\"Shareable\"}}}}",
                                         "DynamicParamBlock":  null,
                                         "ScriptRequirements":  null,
                                         "Extent":  "{@{name=\"Family\"; value=\"Smith\"; sources={@{name=\"Me\"; status=@{name=\"Shareable\"}}}}}",
                                         "Parent":  "{@{name=\"Family\"; value=\"Smith\"; sources={@{name=\"Me\"; status=@{name=\"Shareable\"}}}}}"
                                     }
                         }
}

我希望输出看起来像

{
  "delete_after_import": 0,
  "file_description": null,
  "file_title": null,
  "import_source": {
    "name": "Me",
    "status": {
      "name": "Shareable"
    }
  },
  "file_type": 6,
  "global_status": 1,
  "apply_attributes": [
    {
      "name": "Family",
      "value": "Smith",
      "sources": [
        {
          "name": "Me",
          "status": {
            "name": "Shareable"
          }
        }
      ]
    }
  ]
}

我从未见过ConvertTo-JSON做这样的事情。有人知道发生了什么事,以及我如何解决它?

1 个答案:

答案 0 :(得分:3)

要获取正确的格式:对于要转换为JSON数组的项目,请使用ClaimsPrincipal

第二,您必须在@(...)中使用-Depth参数。默认情况下,ConvertTo-Json只能达到2级。这就是为什么您得到奇怪结果的原因。它返回的是对象类型(即ConvertTo-Json),而不是按预期方式枚举对象的其余部分。因此,更新后的代码即可获得所需的内容:

x.ToString()