【问题标题】:Powershell saving elements in order to json filePowershell 将元素保存为 json 文件
【发布时间】:2021-11-26 17:59:05
【问题描述】:

我目前正在将一个数组传输到一个 json 文件。我希望能够按顺序保存元素。

            {
                New-Object PSObject -Property @{
                    Name = $ADInfo.DisplayName
                    Username = $Username
                    Email = $Email
                    Date = $Date
                    Manager = $ManagerName
                    ManagerEmail = $ManagerEmail
                    Manager2 = $ManagerName2
                    ManagerEmail2 = $ManagerEmail2
                    Manager3 = $ManagerName3
                    ManagerEmail3 = $ManagerEmail3
                    ServiceTag = $ServiceTagTextBox.text
                    FedExSentTracking = "https://www.fedex.com/fedextrack/?tracknumbers=" + $FedEXSentTextBox.text
                    FedExRecievedTracking = "https://www.fedex.com/fedextrack/?tracknumbers=" + $FedEXRecievedTextBox.text


                }
            }

            $script:jsonDB += $CollectionData

            $script:jsonDB | ConvertTo-Json -Compress  | 
            Set-Content C:\Support\HardwareCollection.json

当我这样保存时,输出看起来像下面的数据库。

[{"ServiceTag":"1","Username":"RandomUser","Manager":"Random Manager","ManagerEmail3":"Manager3@company.com","ManagerEmail":"Manager@company.com","Name":"Some User","ManagerEmail2":"Manager2@company.com","Manager3":"Random Manager3","FedExSentTracking":"https://www.fedex.com/fedextrack/?tracknumbers=1","FedExRecievedTracking":"https://www.fedex.com/fedextrack/?tracknumbers=1","Manager2":"Random Manager 2","Date":"10/06/2021 09:17:24 -05:00","Email":"Client@Company.com"}]

如何保存元素,以便它们按照我的第一个代码块中的顺序保存到 json 文件中,而不是第二个代码块中的无序混乱。

非常感谢!!!

【问题讨论】:

    标签: json powershell


    【解决方案1】:

    使用the [pscustomobject] initializer syntax to create the object 代替New-Object -Property - 这将保留指定属性的顺序:

    [pscustomobject]@{
        Name                  = $ADInfo.DisplayName
        Username              = $Username
        Email                 = $Email
        Date                  = $Date
        Manager               = $ManagerName
        ManagerEmail          = $ManagerEmail
        Manager2              = $ManagerName2
        ManagerEmail2         = $ManagerEmail2
        Manager3              = $ManagerName3
        ManagerEmail3         = $ManagerEmail3
        ServiceTag            = $ServiceTagTextBox.text
        FedExSentTracking     = "https://www.fedex.com/fedextrack/?tracknumbers=" + $FedEXSentTextBox.text
        FedExRecievedTracking = "https://www.fedex.com/fedextrack/?tracknumbers=" + $FedEXRecievedTextBox.text
    }
    

    如果您发现自己需要提前构建属性字典并希望稍后将其传递给New-Object[pscustomobject],请将哈希表文字转换为[ordered] - 这将使 PowerShell 创建一个插入排序的字典而不是哈希表:

    $properties = [ordered]@{
      Name = "John Doe"
    }
    
    # ...
    
    # Add some more property definitions to the dictionary
    $properties['Date'] = Get-Date
    $properties['OtherStuff'] = "more information"
    
    # both methods will now produce an object with the properties in the right order
    New-Object PSObject -Property $properties
    # or
    [pscustomobject]$properties
    

    【讨论】:

    • 感谢这让我不得不一直重新排序第一个条目。你太棒了!!!!!!
    • @Listor 太好了,不客气!我添加了一个示例,说明如何在不强制转换文字的情况下保留字典/哈希表的插入顺序
    猜你喜欢
    • 2014-12-31
    • 1970-01-01
    • 2018-07-31
    • 2013-04-23
    • 2022-12-15
    • 2020-04-14
    • 1970-01-01
    • 2019-08-12
    • 1970-01-01
    相关资源
    最近更新 更多