現在WwbAPIを用いて学習を行なっています。
ポストを送って返ってきたJsonの値を
フォームに配置したDataGridViewに下記のように表として表示をしたいと考えております。
Json
1 "A": { 2 "A-B": false, 3 "A-C": [100,0], 4 "A-D":[ 5 { 6 "D-1": "10", 7 "D-2": { 8 "D-2-1": "20", 9 "D-2-2": { 10 "D-2-2-1": "30" 11 } 12 } 13}
上記のJsonを下記のように、階層のキーを全て取得して表示したいと考えています。
実際にコーディングしたのですが、
2階層戻るときに表示がうまくできていない現状です。
DataGirdView
1キー 値 2A.A-B.A-C false 3A.A-C(1) 100 4 (2) 0 5A,A-D,D-1 10 6A,A-D,D-2,D-2-1 20 7A,A-D,D-2,D-2-2-1 30
現状のコードでおかしな点を教えて欲しいと思っております。
詳しい方どうぞよろしくお願いします。
実際のコードは下記の通りです。
VB.NET
1Dim KName As String = Nothing 2Dim Key As String = Nothing 3 4'ロードイベントにて 5'Jsonはデシリアライズしたものです。 6SetDGV(Json, Key) 7 8 Private Sub SetDGV(source As JToken, Key As String) 9 10 If (source.Type = JTokenType.Object) Then 11 12 'Keyに変更があったときKNameを更新する 13 If Not KName = Key Then 14 KName = KName + " . " + Key 15 End If 16 17 CheckObject(DirectCast(source, JObject), KName) 18 19 ElseIf (source.Type = JTokenType.Array) Then 20 CheckArray(DirectCast(source, JArray), Key) 21 22 Else 23 Key = KName + " . " + Key 24 AddListView(source, Key) 25 End If 26 27 End Sub 28 29 Private Sub CheckObject(source As JObject, Key As String) 30 31 For Each Properties In source.Properties 32 SetDGV(Properties.Value, Properties.Name) 33 Next 34 35 End Sub 36 37 '配列の名前とその配列内の要素をAddListに渡して再帰 38 Private Sub CheckArray(source As JArray, key As String) 39 40 Dim Counter As Integer = 0 41 42 For Each value In source 43 44 '配列名の末尾に配列番号を追加 45 Dim ArrayName As String = key & "[" & Counter & "]" 46 47 SetDGV(value, ArrayName) 48 49 Counter = Counter + 1 50 51 Next 52 End Sub 53 54 'DataGridViewにキーと値を表示する処理 55 Private Sub AddListView(value As String, Key As String) 56 57 'If value IsNot "" AndAlso value IsNot Nothing Then 58 dr = dt.NewRow() 59 dr(0) = Key 60 dr(1) = value 61 dt.Rows.Add(dr) 62 'End If 63 64 End Sub
あなたの回答
tips
プレビュー