Skip to content

Commit d8021bd

Browse files
authored
x.json2.decoder2: support nesteded maps (#23027)
1 parent e421cb2 commit d8021bd

File tree

2 files changed

+16
-11
lines changed

2 files changed

+16
-11
lines changed

vlib/x/json2/decoder2/decode.v

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -322,7 +322,7 @@ fn (mut checker Decoder) check_json_format(val string) ! {
322322
}
323323
}
324324
}
325-
if checker.checker_idx < checker_end - 1 {
325+
if checker.checker_idx < checker_end - 2 {
326326
checker.checker_idx++
327327
}
328328
}
@@ -748,9 +748,12 @@ fn (mut decoder Decoder) decode_map[K, V](mut val map[K]V) ! {
748748

749749
mut map_value := V{}
750750

751-
decoder.decode_value(mut map_value)!
752-
753-
val[key] = map_value
751+
$if V is $map {
752+
val[key] = map_value.move()
753+
} $else {
754+
val[key] = map_value
755+
}
756+
decoder.decode_value(mut val[key])!
754757
}
755758
}
756759
}

vlib/x/json2/decoder2/tests/decode_object_test.v

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -39,14 +39,16 @@ fn test_array_of_strings() {
3939
assert json.decode[map[string]string]('{"val": "2"}')! == {
4040
'val': '2'
4141
}
42-
// assert json.decode[map[string]int]('{"val": 2}')! == {"val": 2}
42+
assert json.decode[map[string]int]('{"val": 2}')! == {
43+
'val': 2
44+
}
4345

44-
// // nested map
45-
// assert json.decode[map[string]map[string]string]('{"val": {"val2": "2"}}')! == {
46-
// 'val': {
47-
// 'val2': '2'
48-
// }
49-
// }
46+
// nested map
47+
assert json.decode[map[string]map[string]string]('{"val": {"val2": "2"}}')! == {
48+
'val': {
49+
'val2': '2'
50+
}
51+
}
5052

5153
// nested struct
5254
assert json.decode[Stru]('{"val": 1, "val2": "lala", "val3": {"a": 2, "brazilian_steak": "leleu"}}')! == Stru{

0 commit comments

Comments
 (0)