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.id == 1
|
||||||
assert list.items == []
|
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 '
|
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))) );
|
Option err = v_error( string_add(_SLIT("Json element is not an array: "), tos2(cJSON_PrintUnformatted(root))) );
|
||||||
return *(Option_array_$styp *)&err;
|
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 '
|
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))) );
|
Option err = v_error( string_add(_SLIT("Json element is not an object: "), tos2(cJSON_PrintUnformatted(root))) );
|
||||||
return *(Option_map_${styp}_$styp_v *)&err;
|
return *(Option_map_${styp}_$styp_v *)&err;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue