PowerShell移除嵌套JSON对象length属性失效问题排查
问题根因
- 你的JSON结构中
record1、record2字段的取值是数组类型,数组内部才是存储length自定义属性的实际对象。 - 原代码里
$_.Value直接取到的是外层数组,PowerShell的数组本身自带只读的Length内置属性(作用是返回数组元素总数),所以Get-Member检测到的length是数组的固有属性,根本不是你要删除的自定义字段。 - 后续调用
Remove("length")的操作对象是外层数组,既删不掉数组的内置只读属性,也完全没有遍历到数组内部的目标对象,自然最终输出文件和原文件内容完全一致。
修正方案
只需要在遍历每个record时,先遍历对应数组内的所有元素,再对元素执行属性删除操作即可。另外建议把ConvertTo-Json的序列化深度设为10,避免默认深度不足导致嵌套JSON内容被意外截断:
$infile = "C:\Temp\input.json" $outfile = "C:\Temp\output.json" $json = Get-Content $infile -Encoding UTF8 | ConvertFrom-Json $records = $json.records $records.PSObject.Properties | ForEach-Object { # 遍历当前record对应数组下的所有对象 foreach ($item in $_.Value) { if ($item.PSObject.Properties.Name -contains "length") { Write-Host "length property found." $item.PSObject.Properties.Remove("length") } } } $json | ConvertTo-Json -Depth 10 | Out-File $outfile -Encoding UTF8
内容的提问来源于stack exchange,提问作者Nemo XXX
相关产品推荐
相关产品推荐

