v/vlib/json
2024-03-25 12:18:27 +02:00
..
cjson all: update copyright year (#20334) 2024-01-01 23:29:54 +02:00
json_alias_test.v json: fix json.decode with map alias (#17925) 2023-04-10 19:50:35 +03:00
json_decode_option_enum_test.v json: fix struct with option enum field (fix #20597) #20597 2024-01-20 19:54:12 +02:00
json_decode_struct_ptr_test.v json: fix decode struct ptr (#20828) 2024-02-15 06:41:10 +02:00
json_decode_test.v all: update attributes to use new syntax 2023-11-15 16:16:01 +11:00
json_decode_with_encode_arg_test.v db, json, time, term: change optional to result (#16201) 2022-10-26 11:26:28 +03:00
json_decode_with_generic_array_test.v checker: fix json decode with generic array of struct (fix #18300) (#18308) 2023-05-30 14:25:33 +02:00
json_decode_with_generic_test.v all: replace generic <> with [] - part 2 (#16536) 2022-11-26 18:23:26 +02:00
json_decode_with_option_arg_test.v all: change optional to option (#16914) 2023-01-09 09:36:45 +03:00
json_decode_with_sumtype_test.v db, json, time, term: change optional to result (#16201) 2022-10-26 11:26:28 +03:00
json_encode_enum_test.v all: update attributes to use new syntax 2023-11-15 16:16:01 +11:00
json_encode_map_test.v json: fix -cstrict build + optional map (#18014) 2023-04-22 10:55:25 +03:00
json_encode_primite_test.v json: allow decode/encode of alias to primitive type (#18003) 2023-04-21 19:39:40 +03:00
json_encode_recursive_ptr_test.v checker: fix incorrect checks when struct fields are ref and option type(fix #19555) (#20195) 2023-12-16 20:45:54 +02:00
json_encode_struct_with_option_field_test.v cgen: fix json encoding of structs with option fields (skip the fields with a value of none) (#16916) 2023-01-09 15:33:08 +02:00
json_encode_sumtype_test.v json: fix option sumtype with int types (#18013) 2023-04-22 10:58:01 +03:00
json_encode_with_mut_test.v all: update attributes to use new syntax 2023-11-15 16:16:01 +11:00
json_encode_with_ptr_test.v json: support field &Type (#17655) 2023-03-16 21:15:14 +02:00
json_generic_array_test.v all: update attributes to use new syntax 2023-11-15 16:16:01 +11:00
json_omitempty_test.v all: update attributes to use new syntax 2023-11-15 16:16:01 +11:00
json_omitempty_types_test.v all: update attributes to use new syntax 2023-11-15 16:16:01 +11:00
json_option_alias_test.v json: fix option alias support (#18801) 2023-07-07 22:03:41 +03:00
json_option_none_test.v json: fix option state (#18802) 2023-07-09 08:23:24 +03:00
json_option_raw_test.v all: update attributes to use new syntax 2023-11-15 16:16:01 +11:00
json_option_struct_test.v json: fix json with option struct (#17942) 2023-04-13 08:17:40 +02:00
json_option_test.v all: update attributes to use new syntax 2023-11-15 16:16:01 +11:00
json_primitives.c.v all: update copyright year (#20334) 2024-01-01 23:29:54 +02:00
json_raw_test.v all: update attributes to use new syntax 2023-11-15 16:16:01 +11:00
json_struct_option_test.v json: fix decode option string (#17812) 2023-03-29 18:45:41 +02:00
json_sumtype_test.v json: fix option sumtype handling (#20186) 2023-12-19 14:11:32 +02:00
json_test.v all: fix typos (#21089) 2024-03-25 12:18:27 +02:00
README.md all: fix typos (#21089) 2024-03-25 12:18:27 +02:00

Description

The json module provides encoding/decoding of V data structures to/from JSON. For more details, see also the JSON section of the V documentation

Examples

Here is an example of encoding and decoding a V struct with several fields. Note that you can specify different names in the json encoding for the fields, and that you can skip fields too, if needed.

import json

enum JobTitle {
	manager
	executive
	worker
}

struct Employee {
mut:
	name   string
	family string   @[json: '-'] // this field will be skipped
	age    int
	salary f32
	title  JobTitle @[json: 'ETitle'] // the key for this field will be 'ETitle', not 'title'
	notes  string   @[omitempty]        // the JSON property is not created if the string is equal to '' (an empty string).
	// TODO: document @[raw]
}

fn main() {
	x := Employee{'Peter', 'Begins', 28, 95000.5, .worker, ''}
	println(x)
	s := json.encode(x)
	println('JSON encoding of employee x: ${s}')
	assert s == '{"name":"Peter","age":28,"salary":95000.5,"ETitle":"worker"}'
	mut y := json.decode(Employee, s)!
	assert y != x
	assert y.family == ''
	y.family = 'Begins'
	assert y == x
	println(y)
	ss := json.encode(y)
	println('JSON encoding of employee y: ${ss}')
	assert ss == s
}