Skip to content

Commit 430c9db

Browse files
committed
Add support for 2D arrays
1 parent 2b1ae00 commit 430c9db

File tree

3 files changed

+50
-5
lines changed

3 files changed

+50
-5
lines changed

JSONConverter.bas

Lines changed: 38 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -97,9 +97,19 @@ Public Function ConvertToJSON(ByVal JSON_DictionaryCollectionOrArray As Variant,
9797
Dim JSON_LBound As Long
9898
Dim JSON_UBound As Long
9999
Dim JSON_IsFirstItem As Boolean
100+
Dim JSON_Index2D As Long
101+
Dim JSON_LBound2D As Long
102+
Dim JSON_UBound2D As Long
103+
Dim JSON_IsFirstItem2D As Boolean
100104
Dim JSON_Key As Variant
101105
Dim JSON_Value As Variant
106+
107+
JSON_LBound = -1
108+
JSON_UBound = -1
102109
JSON_IsFirstItem = True
110+
JSON_LBound2D = -1
111+
JSON_UBound2D = -1
112+
JSON_IsFirstItem2D = True
103113

104114
Select Case VarType(JSON_DictionaryCollectionOrArray)
105115
Case vbNull, vbEmpty
@@ -127,8 +137,10 @@ Public Function ConvertToJSON(ByVal JSON_DictionaryCollectionOrArray As Variant,
127137

128138
On Error Resume Next
129139

130-
JSON_LBound = LBound(JSON_DictionaryCollectionOrArray)
131-
JSON_UBound = UBound(JSON_DictionaryCollectionOrArray)
140+
JSON_LBound = LBound(JSON_DictionaryCollectionOrArray, 1)
141+
JSON_UBound = UBound(JSON_DictionaryCollectionOrArray, 1)
142+
JSON_LBound2D = LBound(JSON_DictionaryCollectionOrArray, 2)
143+
JSON_UBound2D = UBound(JSON_DictionaryCollectionOrArray, 2)
132144

133145
If JSON_LBound >= 0 And JSON_UBound >= 0 Then
134146
For JSON_Index = JSON_LBound To JSON_UBound
@@ -137,10 +149,31 @@ Public Function ConvertToJSON(ByVal JSON_DictionaryCollectionOrArray As Variant,
137149
Else
138150
JSON_BufferAppend JSON_Buffer, ",", JSON_BufferPosition, JSON_BufferLength
139151
End If
152+
153+
If JSON_LBound2D >= 0 And JSON_UBound2D >= 0 Then
154+
JSON_BufferAppend JSON_Buffer, "[", JSON_BufferPosition, JSON_BufferLength
140155

141-
JSON_BufferAppend JSON_Buffer, _
142-
ConvertToJSON(JSON_DictionaryCollectionOrArray(JSON_Index), JSON_ConvertLargeNumbersFromString), _
143-
JSON_BufferPosition, JSON_BufferLength
156+
For JSON_Index2D = JSON_LBound2D To JSON_UBound2D
157+
If JSON_IsFirstItem2D Then
158+
JSON_IsFirstItem2D = False
159+
Else
160+
JSON_BufferAppend JSON_Buffer, ",", JSON_BufferPosition, JSON_BufferLength
161+
End If
162+
163+
JSON_BufferAppend JSON_Buffer, _
164+
ConvertToJSON(JSON_DictionaryCollectionOrArray(JSON_Index, JSON_Index2D), _
165+
JSON_ConvertLargeNumbersFromString), _
166+
JSON_BufferPosition, JSON_BufferLength
167+
Next JSON_Index2D
168+
169+
JSON_BufferAppend JSON_Buffer, "]", JSON_BufferPosition, JSON_BufferLength
170+
JSON_IsFirstItem2D = True
171+
Else
172+
JSON_BufferAppend JSON_Buffer, _
173+
ConvertToJSON(JSON_DictionaryCollectionOrArray(JSON_Index), _
174+
JSON_ConvertLargeNumbersFromString), _
175+
JSON_BufferPosition, JSON_BufferLength
176+
End If
144177
Next JSON_Index
145178
End If
146179

specs/Specs.bas

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -193,6 +193,18 @@ Public Function Specs() As SpecSuite
193193
.Expect(JSONString).ToEqual "[""123456789012345678901234567890""]"
194194
End With
195195

196+
With Specs.It("should convert 2D arrays")
197+
' Checks https://code.google.com/p/vba-json/issues/detail?id=8
198+
Dim MultiDimensionalArray(1, 1) As Variant
199+
MultiDimensionalArray(0, 0) = 1
200+
MultiDimensionalArray(0, 1) = 2
201+
MultiDimensionalArray(1, 0) = 3
202+
MultiDimensionalArray(1, 1) = 4
203+
204+
JSONString = JSONConverter.ConvertToJSON(MultiDimensionalArray)
205+
.Expect(JSONString).ToEqual "[[1,2],[3,4]]"
206+
End With
207+
196208
' ============================================= '
197209
' Errors
198210
' ============================================= '

specs/VBA-JSONConverter - Specs.xlsm

2.3 KB
Binary file not shown.

0 commit comments

Comments
 (0)