mirror of
https://github.com/vlang/v.git
synced 2025-09-13 14:32:26 +03:00
json: support @[json_null]
tag to enforce null
, when encoding none
option values (#23319)
This commit is contained in:
parent
d9e505b206
commit
8cdb507bed
2 changed files with 35 additions and 1 deletions
26
vlib/json/tests/json_is_null_attr_test.v
Normal file
26
vlib/json/tests/json_is_null_attr_test.v
Normal file
|
@ -0,0 +1,26 @@
|
|||
import json
|
||||
|
||||
struct Bar {
|
||||
name ?string @[json_null]
|
||||
}
|
||||
|
||||
struct Foo {
|
||||
name ?string @[json_null]
|
||||
age ?int @[json_null]
|
||||
text ?string
|
||||
other ?Bar
|
||||
other2 ?Bar @[json_null]
|
||||
}
|
||||
|
||||
fn test_main() {
|
||||
assert json.encode(Foo{}) == '{"name":null,"age":null,"other2":null}'
|
||||
assert json.encode(Foo{ name: '' }) == '{"name":"","age":null,"other2":null}'
|
||||
assert json.encode(Foo{ age: 10 }) == '{"name":null,"age":10,"other2":null}'
|
||||
assert json.encode(Foo{
|
||||
age: 10
|
||||
other2: Bar{
|
||||
name: none
|
||||
}
|
||||
}) == '{"name":null,"age":10,"other2":{"name":null}}'
|
||||
assert json.decode(Foo, json.encode(Foo{}))! == Foo{}
|
||||
}
|
|
@ -649,6 +649,7 @@ fn (mut g Gen) gen_struct_enc_dec(utyp ast.Type, type_info ast.TypeInfo, styp st
|
|||
mut is_required := false
|
||||
mut is_omit_empty := false
|
||||
mut skip_embed := false
|
||||
mut is_json_null := false
|
||||
|
||||
for attr in field.attrs {
|
||||
match attr.name {
|
||||
|
@ -672,6 +673,9 @@ fn (mut g Gen) gen_struct_enc_dec(utyp ast.Type, type_info ast.TypeInfo, styp st
|
|||
'omitempty' {
|
||||
is_omit_empty = true
|
||||
}
|
||||
'json_null' {
|
||||
is_json_null = true
|
||||
}
|
||||
else {}
|
||||
}
|
||||
}
|
||||
|
@ -952,7 +956,11 @@ fn (mut g Gen) gen_struct_enc_dec(utyp ast.Type, type_info ast.TypeInfo, styp st
|
|||
}
|
||||
|
||||
if is_option {
|
||||
enc.writeln('\t} // !none')
|
||||
if is_json_null {
|
||||
enc.writeln('\t} else {')
|
||||
enc.writeln('\t\tcJSON_AddItemToObject(o, "${name}", cJSON_CreateNull());')
|
||||
}
|
||||
enc.writeln('\t}')
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue