@@ -8,6 +8,8 @@ proc parseJson[T](s: string, i: var int, v: var seq[T])
88proc parseJson [T:enum ](s: string , i: var int , v: var T)
99proc parseJson [T:object | ref object ](s: string , i: var int , v: var T)
1010proc parseJson [T](s: string , i: var int , v: var Table [string , T])
11+ proc parseJson [T:tuple ](s: string , i: var int , v: var T)
12+ proc parseJson [T:array ](s: string , i: var int , v: var T)
1113
1214template error (msg: string , i: int ) =
1315 # # Short cut to raise an exception.
@@ -123,6 +125,30 @@ proc parseJson[T](s: string, i: var int, v: var seq[T]) =
123125 break
124126 eat (s, i, ']' )
125127
128+ proc parseJson [T:tuple ](s: string , i: var int , v: var T) =
129+ eatSpace (s, i)
130+ var strV: string
131+ eat (s, i, '[' )
132+ for name, value in v.fieldPairs:
133+ eatSpace (s, i)
134+ parseJson (s, i, value)
135+ eatSpace (s, i)
136+ if s[i] == ',' :
137+ inc i
138+ eat (s, i, ']' )
139+
140+ proc parseJson [T:array ](s: string , i: var int , v: var T) =
141+ eatSpace (s, i)
142+ var strV: string
143+ eat (s, i, '[' )
144+ for value in v.mitems:
145+ eatSpace (s, i)
146+ parseJson (s, i, value)
147+ eatSpace (s, i)
148+ if s[i] == ',' :
149+ inc i
150+ eat (s, i, ']' )
151+
126152proc skipValue (s: string , i: var int ) =
127153 # # Used to skip values of extra fields.
128154 # echo "Skip:", s[i .. min(i + 80, s.len-1)]
0 commit comments