2017-07-18 60 views
2

我需要從XML文檔讀取一些數據,然後將其格式化爲JSON,以便作爲POST提交給我們正在部署的新Web服務。雖然我得到了大多數它工作,我對JSON如何出來(我可以修改web服務,如果需要的話,所以我現在的數據格式問題大多是化妝品)並不是很滿意。從xml文檔/ Powershell生成JSON /控制陣列格式

所以...數據源(XML文件):

<ConfigRepository ServiceUri="http://somemachine" 
        ConnectionTimeout="10000" 
        CacheEnabled="true" 
        CacheExpirationDuration="600" 
        ServiceMonitorPollDuration="10" /> 

PowerShell代碼閱讀本/生成JSON:

$configRepository = @() 
foreach($attr in ($xml.Configuration.ConfigRepository).attributes) 
{ 
    $configRepository += @{ $attr.Name = $attr.Value} 
} 

當輸出到JSON,我得到的是這樣的:

"ConfigRepository": [ 
    { 
     "CacheEnabled": "true" 
    }, 
    { 
     "CacheExpirationDuration": "600" 
    }, 
    { 
     "ConnectionTimeout": "10000" 
    }, 
    { 
     "ServiceMonitorPollDuration": "10" 
    }, 
    { 
     "ServiceUri": "http://somemachine" 
    }, 
]  

實際的問題:

有沒有一種方法來保持我的PS代碼通用,但有這樣的輸出呢?

"ConfigRepository": [ 
    { 
     "CacheEnabled": "true" 
     "CacheExpirationDuration": "600" 
     "ConnectionTimeout": "10000" 
     "ServiceMonitorPollDuration": "10" 
     "ServiceUri": "http://somemachine" 
    }, 
] 
+0

'$ configRepository'是一個數組。你如何將數組轉換爲JSON? –

+0

使用標準的'ConvertTo-Json' - 這個數組是一個更大的數組的一部分,我只發佈了一些與手頭問題相關的部分... –

回答

1

不窩在數組中的哈希表 - 刪除$configRepository = @()

foreach($attr in ($xml.Configuration.ConfigRepository).attributes) 
{ 
    $configRepository += @{ $attr.Name = $attr.Value} 
} 
+0

哇,那很簡單!非常感謝。 - 當我可以的時候我會接受它(顯然需要等待幾分鐘)。 –

+0

@NunoLinhares沒問題!註冊簡單,PowerShell很好。 [以前,另一個StackOverflow靈魂有相反的問題](https://stackoverflow.com/questions/44433728/powershell-to-form-correctly-formatted-json-for-calendar-entry/44433946) – gms0ulman