在准备供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
做这样的事情。有人知道发生了什么事,以及我如何解决它?
答案 0 :(得分:3)
要获取正确的格式:对于要转换为JSON数组的项目,请使用ClaimsPrincipal
。
第二,您必须在@(...)
中使用-Depth
参数。默认情况下,ConvertTo-Json
只能达到2级。这就是为什么您得到奇怪结果的原因。它返回的是对象类型(即ConvertTo-Json
),而不是按预期方式枚举对象的其余部分。因此,更新后的代码即可获得所需的内容:
x.ToString()