json: fix decoding of null map/array (#7936)
parent
6c013023fc
commit
2ad2d68d7c
|
@ -366,3 +366,16 @@ fn test_list_no_items() {
|
|||
assert list.id == 1
|
||||
assert list.items == []
|
||||
}
|
||||
|
||||
struct Info {
|
||||
id int
|
||||
items []string
|
||||
maps map[string]string
|
||||
}
|
||||
|
||||
fn test_decode_null_object() {
|
||||
info := json.decode(Info, '{"id": 22, "items": null, "maps": null}') or { panic(err) }
|
||||
assert info.id == 22
|
||||
assert '$info.items' == '[]'
|
||||
assert '$info.maps' == '{}'
|
||||
}
|
||||
|
|
|
@ -222,7 +222,7 @@ fn (mut g Gen) decode_array(value_type table.Type) string {
|
|||
'
|
||||
}
|
||||
return '
|
||||
if(root && !cJSON_IsArray(root)) {
|
||||
if(root && !cJSON_IsArray(root) && !cJSON_IsNull(root)) {
|
||||
Option err = v_error( string_add(_SLIT("Json element is not an array: "), tos2(cJSON_PrintUnformatted(root))) );
|
||||
return *(Option_array_$styp *)&err;
|
||||
}
|
||||
|
@ -267,7 +267,7 @@ fn (mut g Gen) decode_map(key_type table.Type, value_type table.Type) string {
|
|||
'
|
||||
}
|
||||
return '
|
||||
if(!cJSON_IsObject(root)) {
|
||||
if(!cJSON_IsObject(root) && !cJSON_IsNull(root)) {
|
||||
Option err = v_error( string_add(_SLIT("Json element is not an object: "), tos2(cJSON_PrintUnformatted(root))) );
|
||||
return *(Option_map_${styp}_$styp_v *)&err;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue