gpt4 book ai didi

json - ConvertFrom-JSON从对象剥离数组

转载 作者:行者123 更新时间:2023-12-03 00:36:51 36 4
gpt4 key购买 nike

我正在加载一个包含一些Json的文本文件来编辑属性。但是,修改内容并将其写入文件后,Json变得无效。

我使用以下PowerShell修改文件:

$manifest = Get-Content $PathToManifest -Raw | ConvertFrom-Json

#modify Json

Set-Content -Path $PathToManifest -Value ( $manifest | ConvertTo-Json)

我的Json文件中的以下代码段已损坏:
 "contributions": [
{
"id": "sample-data-widget",
"type": "ms.vss-dashboards-web.widget",
"targets": ["ms.vss-dashboards-web.widget-catalog"],
"properties": "@{name=Sample Data; description=Create sample data in a VSTS project.; previewImageUrl=img/logo.png; uri=index.html; supportedSizes=System.Object[]; supportedScopes=System.Object[]}"
}]

加载Json并将其写回文件后,目标周围的数组语法消失了:
  "contributions": [
{
"id": "sample-data-widget",
"type": "ms.vss-dashboards-web.widget",
"targets": "ms.vss-dashboards-web.widget-catalog",
"properties": "@{name=Sample Data; description=Create sample data in a VSTS project.; previewImageUrl=img/logo.png; uri=index.html; supportedSizes=System.Object[]; supportedScopes=System.Object[]}"
}]

为什么会这样呢?有没有办法确保语法不变?

最佳答案

ConvertTo-Json具有Depth参数,该参数控制JSON表示形式中包含多少级所包含的对象。默认值为2ConvertTo-Json将在嵌套比指定.ToString()更深的任何内容上调用Depth

因此,您需要为Depth参数或([int]::MaxValue)指定足够大的数字。

Set-Content -Path $PathToManifest -Value ( $manifest | ConvertTo-Json -Depth ([int]::MaxValue))  

嵌套和 ConvertTo-Json行为的示例:
$NestedArray = @(1,@(2,@(3,@(4))))

默认:
$NestedArray | ConvertTo-Json

[
1,
{
"value": [
2,
[
3,
"4"
]
],
"Count": 2
}
]

完全没有嵌套:
$NestedArray | ConvertTo-Json -Depth 1

[
1,
{
"value": [
2,
"3 System.Object[]"
],
"Count": 2
}
]

所需结果:
$NestedArray | ConvertTo-Json -Depth 3

[
1,
{
"value": [
2,
[
3,
[
4
]
]
],
"Count": 2
}
]

关于json - ConvertFrom-JSON从对象剥离数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35485594/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com