PowerShell中如何按JSON对象的Index键值对元素进行排序
JSON按Index字段排序PowerShell实现方案
问题原因
原有代码不生效的核心原因是:你读取JSON后得到的是单个PS自定义对象,PIPoint、Custom Location等字段都是该对象的属性,而非数组元素,直接对对象执行Sort-Object不会产生排序效果。
正确实现代码
# 读取JSON文件 $json = Get-Content 'C:\column.json' | ConvertFrom-Json # 取出所有属性并按Index数值排序 $sortedProperties = $json.PSObject.Properties | Sort-Object { [int]$_.Value.Index } # 构建有序对象保留排序结果 $sortedObj = [ordered]@{} foreach ($prop in $sortedProperties) { $sortedObj[$prop.Name] = $prop.Value } # 输出排序后的JSON $sortedObj | ConvertTo-Json -Depth 10 | Out-File 'C:\column_sorted.json' -Encoding UTF8
关键说明
- 必须先通过
PSObject.Properties取出对象的所有属性集合,才能执行排序操作 - 排序时将
Index字段转为int类型,避免字符串排序导致的顺序错误(比如字符串"10"会排在"2"前面) - 排序后通过有序字典
[ordered]重构对象,才能保留排序后的属性顺序 ConvertTo-Json添加-Depth参数避免嵌套层级过深时内容被截断,指定-Encoding UTF8避免输出文件乱码
内容的提问来源于stack exchange,提问作者Anastasios
相关产品推荐
相关产品推荐

