问题描述
在使用 ConvertTo-Json
显示它们之前,我试图将数据打包到对象中.下面的测试用例完美地展示了我如何处理数据以及发生了什么问题:
I'm trying to pack my data into objects before displaying them with ConvertTo-Json
. The test case below shows perfectly how I'm dealing with data and what problem occurs:
$array = @("a","b","c")
$data = @{"sub" = @{"sub-sub" = $array}}
$output = @{"root" = $data}
ConvertTo-Json -InputObject $data
ConvertTo-Json -InputObject $output
输出(为清晰起见手动格式化):
Output (formatted by hand for clarity):
{ "sub": { "sub-sub": [ "a", "b", "c" ] }}
{ "root": { "sub": { "sub-sub": "a b c" } }}
有没有什么方法可以将 $data
分配给 $output
而没有这种奇怪的隐式转换?
Is there any way to assign $data
to $output
without this weird implicit casting?
推荐答案
正如评论中提到的,ConvertTo-Json
将尝试将对象结构扁平化 超出最大值嵌套级别或深度,通过将它找到的超出该深度的任何对象转换为字符串.
As mentioned in the comments, ConvertTo-Json
will try to flatten the object structure beyond a maximum nesting level, or depth, by converting whatever object it finds beyond that depth to a string.
默认深度为 2,但您可以使用 Depth
参数指定它应该更深:
The default depth is 2, but you can specify that it should go deeper with the Depth
parameter:
PS C:\> @{root=@{level1=@{level2=@("level3-1","level3-2")}}}|ConvertTo-Json
{
"root": {
"level1": {
"level2": "level3-1 level3-2"
}
}
}
PS C:\> @{root=@{level1=@{level2=@("level3-1","level3-2")}}}|ConvertTo-Json -Depth 3
{
"root": {
"level1": {
"level2": [
"level3-1",
"level3-2"
]
}
}
}
这篇关于意外的数组到字符串转换的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!