

PowerShell ConvertTo-Json 複雜巢狀結構注意事項
source link: https://blog.darkthread.net/blog/converto-json-depth/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

ConvertTo-Json/ConvertFrom-Json 是少數我用不順手的 PowerShell 指令,過去就踩過幾次雷(ConvertFrom-JSON 解析大型 JSON 報錯、ConvertFrom-Json 還原陣列無法 Where-Object 篩選),最近又踩到一枚。
例如以下這段程式,JSON 用 ConvertFrom-Json 轉成物件再 ConvertTo-Json 回 JSON 會走味,O 屬性物件的 SA 陣列會變成字串:
$json = @"
[
{ "A": [1,2], "O": { "SA": [100] } },
{ "A": [3,4], "O": { "SA": ["One","Two"] } }
]
"@
$a = $json | ConvertFrom-Json
$a | ConvertTo-Json
原因很簡單,我不夠認真,使用前沒詳閱公開說明書 - ConvertTo-Json 遇到屬性型別是物件(非 string、int 之類單純型別),該物件屬性型別又是物件的巢狀結構式,預設只處理到第二層,再往下會直接轉成字串。用下面這個例子可以看得更清楚:
$complexObj = @{
Lv = 1
Lv1Obj = @{
Lv = 2
Lv2Obj = @{
Lv = 3
Lv3Obj = @{
Lv = 4
}
}
}
}
$complexObj | ConvertTo-Json
轉出來的 JSON,Lv3Obj 被轉成字串 - System.Collections.Hashtable,而在文章開始的案例 "100" 跟 "One Two" 也是 PowerShell 將 @(100)、@("One","Two") 轉成字串的結果。
ConvertTo-Json 提供了一個 -Depth n 參數可指定要深入到第幾層,以上案例加 -Depth 3 就是我們預期的結果了。
沒什麼大學問,要嘛花點時間把唐詩三百首官方文件從頭唸到尾,要嘛踩個一次雷馬上就能學會,或者也可以訂閱本部落格,英雄自然你來當,踩雷,我來! XD
- Posted in
- PowerShell
Comments
Be the first to post a comment
Post a comment
CommentRecommend
-
5
Go 語言 Select Multiple Channel 注意事項
-
15
網頁內嵌 JSON 注意事項 2021-01-07 08:29 PM 0 2,468 在輸出網頁時內嵌 JSON 轉成 JavaScript 物件是我愛用的手法,這點之前有
-
5
February 6, 2021 ...
-
9
AppDomain.AssemblyResolve 內嵌 DLL 成單一 EXE 檔注意事項-黑暗執行緒開發小工具時,把相依的 DLL 包進單一 EXE 是很有用的技巧,如此使用者只需複製單一檔案到特定目錄或桌面便能執行,省去跑安裝程式或建立資料夾放入 EXE + DLL 的麻煩。 要達成這個...
-
4
PowerShell 傳遞含雙引號與空白的複雜參數給外部 EXE-黑暗執行緒前幾天提到我要下載 Podcast 音檔存入 MP3 運動耳機跑步時聽。平常用手機聽中文 Podcast 我會加快 20% ~ 50% 省點時...
-
6
使用新版 AzCopy v10 的注意事項與使用教學最近在使用 AzCopy 的時候,發現怎麼跟以前差這麼多,這才發現原來最近出現了大改版,命令列的參數都跟以往不一樣了。這個新版改變蠻大的,我覺得對一個用過舊版的人來說,改用新版的第一印象真的不太好,研究的過程中...
-
5
最近有專案需要在報表上顯示 Code 128 條碼,但負責這個功能的開發人員會遇到特定文字產生的條碼無法被掃描/辨識的問題。由於我之前沒有親手處理過 Code 128 條碼,所以藉此研究了一下 Code 128 條碼的產...
-
7
.NET 6 圖形處理跨平台注意事項 2021-12-06 09:09 PM 0 999 .NET Core/.NET 6 號稱跨平台,但實際推進到 Linux,有些眉角遇上才會知道。 繼...
-
17
ASP.NET Core 部署 Linux 搭配 Nginx 注意事項一則-黑暗執行緒 幫忙看了一個茶包:建立 ASP.NET Core 6.0 專案部署到 CentOS 平台,搭配 Nginx Reverse Proxy 對外服務,卻怎麼...
-
8
閱讀筆記: 「升級 Kubernetes 1.22 的注意事項」 Posted on 2022-04-11 Views: 38 「升級 Kubernetes 1.22 的注意事項」 標題: 「升級 Kubernetes 1.22 的注意事項」類別: kubernetes
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK