PowerShell将PSCustomObject转JSON时自定义键排序的实现咨询
问题原因
PowerShell 中默认的哈希表@{}是无序存储结构,你在定义bookmark_bar嵌套节点时使用了普通哈希表,属性不会按照编写顺序保留,因此转换为JSON时键的顺序不符合预期。
解决方法
方法1:定义对象时直接指定顺序
所有需要保留属性顺序的节点,直接使用[PSCustomObject]定义,[PSCustomObject]会严格保留属性的编写顺序:
$BookmarkContainer = [PSCustomObject]@{ "roots" = [PSCustomObject]@{ "other" = [PSCustomObject]@{ "children" = @() } "bookmark_bar" = [PSCustomObject]@{ "children" = @() "name" ="FavouriteBar" "type" ="folder" } } "version"=1 } # 转换为JSON时指定足够的Depth避免嵌套结构被截断 $BookmarkContainer | ConvertTo-Json -Depth 10
方法2:重构已有对象的节点顺序
如果已经生成了$BookmarkContainer对象不想重新定义,可以单独重构bookmark_bar节点的属性顺序:
# 按期望顺序重新构造bookmark_bar节点 $BookmarkContainer.roots.bookmark_bar = [PSCustomObject]@{ children = $BookmarkContainer.roots.bookmark_bar.children name = $BookmarkContainer.roots.bookmark_bar.name type = $BookmarkContainer.roots.bookmark_bar.type } # 转换输出 $BookmarkContainer | ConvertTo-Json -Depth 10
运行上述代码后输出的JSON就会完全符合你期望的键顺序。
内容的提问来源于stack exchange,提问作者ciganfab
相关产品推荐
相关产品推荐

