You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 04:06:05