json - ConvertTo-JSON 插入调试信息
问题描述
在准备用于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
做这样的事情。有谁知道发生了什么,以及我如何解决它?
解决方案
要获得正确的格式:@(...)
用于要转换为 JSON 数组的项目。
其次,您必须-Depth
使用ConvertTo-Json
. 默认情况下ConvertTo-Json
只进入 2 个级别。这就是为什么你会得到奇怪的结果。它返回对象类型(即x.ToString()
),而不是按预期枚举对象的其余部分。所以得到你想要的更新代码是:
$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"}})})
}
$importCommitBodyObj | ConvertTo-Json -Depth 10
推荐阅读
- azure-logic-apps - 无法使用配置文件
- javascript - A chrome extension with Python Flask + Ajax call
- sql - 如何取消透视同一个表中的多个列
- android - 如何在离子框架中隐藏第三方键盘
- python - 检查单词是否适合字典中的键,如果值不存在,则将值写入另一个文件
- express - Passportjs success callback never called
- javascript - React Router | How to reset to Initial State
- c# - 无法使用 Autofac 进行属性注入
- javascript - 在对象内动态执行函数
- java - Palindrome Or Not (SPOJ) Java