前提・実現したいこと
ネストされたデータを外部ファイルに保存し
利用時にPsObjectに変換して使いたいです。
JSONを使ってみようとしたのですが
ネストしたデータが消えてしまいます。
どうしたらいいでしょうか?
今 JSON を使おうとしていますが
XML の方が適しているのであればそちらを使いたいです。
今までCSV しか使ったことが無いので
JSONはKeyの表記が一回で済むから XMLより書くのが楽なんだな
くらいにしかわかっていません。
発生している問題
ネストされたデータをJSONで扱う方法が分からない。
該当のソースコード
PowerShell
1 2# サンプルデータをかさまし... 3$FormatInfo = 0..2 | foreach ` 4{ 5 $Info = [PSCustomObject]@{ 6 TypeName = '部品表' 7 FrameItem = @( 8 [PSCustomObject]@{ 9 Name = "担当" 10 Range = [PSCustomObject]@{ 11 Address = 'AN49:AQ55' 12 Row = 49 13 Column = 40 14 } 15 }, 16 [PSCustomObject]@{ 17 Name = "製図初年月日" 18 Range = [PSCustomObject]@{ 19 Address = 'AW53:BC55' 20 Row = 53 21 Column = 49 22 } 23 }, 24 [PSCustomObject]@{ 25 Name = "製図年月日" 26 Range = [PSCustomObject]@{ 27 Address = 'BD53:BJ55' 28 Row = 53 29 Column = 56 30 } 31 }, 32 [PSCustomObject]@{ 33 Name = "盤名称" 34 Range = [PSCustomObject]@{ 35 Address = 'BN47:CB49' 36 Row = 47 37 Column = 66 38 } 39 }, 40 [PSCustomObject]@{ 41 Name = "管理番号" 42 Range = [PSCustomObject]@{ 43 Address = 'CJ47:CU48' 44 Row = 47 45 Column = 88 46 } 47 }, 48 [PSCustomObject]@{ 49 Name = "件名" 50 Range = [PSCustomObject]@{ 51 Address = 'CG49:CU51' 52 Row = 49 53 Column = 85 54 } 55 }, 56 [PSCustomObject]@{ 57 Name = "件名1" 58 Range = [PSCustomObject]@{ 59 Address = 'CG52:CU55' 60 Row = 52 61 Column = 85 62 } 63 }, 64 [PSCustomObject]@{ 65 Name = "図面名称" 66 Range = [PSCustomObject]@{ 67 Address = 'AW47:BJ49' 68 Row = 47 69 Column = 49 70 } 71 } 72 ) 73 Title = @( 74 [PSCustomObject]@{ 75 Name = "頁" 76 Range = [PSCustomObject]@{ 77 Address = 'M9:P9' 78 Row = 9 79 Column = 13 80 } 81 }, 82 [PSCustomObject]@{ 83 Name = "CharacterSymbol" 84 Range = [PSCustomObject]@{ 85 Address = 'Q9:W9' 86 Row = 9 87 Column = 17 88 } 89 }, 90 [PSCustomObject]@{ 91 Name = "PartsNo" 92 Range = [PSCustomObject]@{ 93 Address = 'X9:Z9' 94 Row = 9 95 Column = 24 96 } 97 }, 98 [PSCustomObject]@{ 99 Name = "EquipmentName" 100 Range = [PSCustomObject]@{ 101 Address = 'AA9:AO9' 102 Row = 9 103 Column = 27 104 } 105 }, 106 [PSCustomObject]@{ 107 Name = "TypeRated" 108 Range = [PSCustomObject]@{ 109 Address = 'AP9:CK9' 110 Row = 9 111 Column = 42 112 } 113 }, 114 [PSCustomObject]@{ 115 Name = "Quantity" 116 Range = [PSCustomObject]@{ 117 Address = 'CL9:CO9' 118 Row = 9 119 Column = 90 120 } 121 }, 122 [PSCustomObject]@{ 123 Name = "Maker" 124 Range = [PSCustomObject]@{ 125 Address = 'CP9:CU9' 126 Row = 9 127 Column = 94 128 } 129 } 130 ) 131 LineCount = 35 132 LineInterval = 1 133 ShName = '部品表' 134 BookName = '部品表.xlsm' 135 Path = "" 136 } 137 $Info 138} 139 140# PSCustomObject を JSON に変換 141$JSON = ConvertTo-Json -InputObject $FormatInfo 142 143# JSON から PSCustomObject を復元 144$PSCustomObject = ConvertFrom-Json $JSON 145 146Clear-Host 147 148# ちゃんとある 149Write-host "`$FormatInfo[0].Title[0].Range.Address : '$($FormatInfo[0].Title[0].Range.Address)'" 150 151# 消えてる.... 152Write-host "`$PSCustomObject[0].Title[0].Range.Address : '$($PSCustomObject[0].Title[0].Range.Address)'" 153
試したこと
- JSONの書き方が全く分からなかったので一先ずPSCustomObjectで記述して
ConvertTo-Json
を使いJSONに変換
0. ネストしたデータが消えていることに気づき
なんとなくJSONの書き方が分かった気がしたのでJSONで書いて
ConvertFrom-Json
を使いPSCustomObjectに変換を試みて失敗...
powershell
1$JSON = @' 2[ 3 { 4 "Title": [ 5 { 6 "Name":"頁" 7 "Range": { 8 "Address": "AN49:AQ55" 9 "Row": 49 10 "Column": 40 11 } 12 } 13 ] 14 }, 15 { 16 "Title": [ 17 { 18 "Name":"頁" 19 "Range": { 20 "Address": "AN49:AQ55" 21 "Row": 49 22 "Column": 40 23 } 24 } 25 ] 26 } 27] 28'@ 29 30# JSON から PSCustomObject に変換...しようとしたができない 31$PSCustomObject = ConvertFrom-Json $JSON
補足情報(FW/ツールのバージョンなど)
Win10
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/11/20 22:25