mirror of
https://github.com/vlang/v.git
synced 2025-09-13 22:42:26 +03:00
json: fix recursive pointer encoding (#19840)
This commit is contained in:
parent
239430aad5
commit
e1312d053a
2 changed files with 22 additions and 2 deletions
19
vlib/json/json_encode_recursive_ptr_test.v
Normal file
19
vlib/json/json_encode_recursive_ptr_test.v
Normal file
|
@ -0,0 +1,19 @@
|
|||
import json
|
||||
|
||||
struct PostTag {
|
||||
id string
|
||||
parent ?&PostTag
|
||||
visibility string
|
||||
created_at string [json: 'createdAt']
|
||||
metadata string [raw]
|
||||
}
|
||||
|
||||
fn test_main() {
|
||||
new_post_tag := PostTag{}
|
||||
assert json.encode(new_post_tag) == '{"id":"","visibility":"","createdAt":"","metadata":""}'
|
||||
|
||||
new_post_tag2 := PostTag{
|
||||
parent: new_post_tag
|
||||
}
|
||||
assert json.encode(new_post_tag2) == '{"id":"","parent":{"id":"","visibility":"","createdAt":"","metadata":""},"visibility":"","createdAt":"","metadata":""}'
|
||||
}
|
|
@ -58,7 +58,7 @@ fn (mut g Gen) gen_jsons() {
|
|||
|
||||
mut init_styp := '${styp} res'
|
||||
if utyp.has_flag(.option) {
|
||||
if sym.kind == .struct_ {
|
||||
if sym.kind == .struct_ && !utyp.is_ptr() {
|
||||
init_styp += ' = '
|
||||
g.set_current_pos_as_last_stmt_pos()
|
||||
pos := g.out.len
|
||||
|
@ -634,7 +634,8 @@ fn (mut g Gen) gen_struct_enc_dec(utyp ast.Type, type_info ast.TypeInfo, styp st
|
|||
dec.writeln('\telse')
|
||||
dec.writeln('\t\t_option_ok(&(${base_typ}[]) { tos5(cJSON_PrintUnformatted(js_get(root, "${name}"))) }, &${prefix}${op}${c_name(field.name)}, sizeof(${base_typ}));')
|
||||
} else {
|
||||
dec.writeln('\tres${op}${c_name(field.name)} = tos5(cJSON_PrintUnformatted(' +
|
||||
dec.writeln(
|
||||
'\t${prefix}${op}${c_name(field.name)} = tos5(cJSON_PrintUnformatted(' +
|
||||
'js_get(root, "${name}")));')
|
||||
}
|
||||
} else {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue