v
Зеркало из https://github.com/vlang/v
1import x.json2 as json
2
3enum JobTitle {
4manager
5executive
6worker
7}
8
9struct Employee {
10pub mut:
11name string
12age int
13salary f32
14title JobTitle
15}
16
17fn test_fast_raw_decode() {
18s := '{"name":"Peter","age":28,"salary":95000.5,"title":2}'
19o := json.fast_raw_decode(s) or {
20assert false
21json.Any('')
22}
23str := o.str()
24assert str == '{"name":"Peter","age":"28","salary":"95000.5","title":"2"}'
25}
26
27fn test_character_unescape() {
28message := r'{
29"newline": "new\nline",
30"tab": "\ttab",
31"backslash": "back\\slash",
32"quotes": "\"quotes\"",
33"slash":"\/dev\/null"
34}'
35mut obj := json.raw_decode(message) or {
36println(err)
37assert false
38return
39}
40lines := obj.as_map()
41assert lines['newline'] or { 0 }.str() == 'new\nline'
42assert lines['tab'] or { 0 }.str() == '\ttab'
43assert lines['backslash'] or { 0 }.str() == 'back\\slash'
44assert lines['quotes'] or { 0 }.str() == '"quotes"'
45assert lines['slash'] or { 0 }.str() == '/dev/null'
46}
47
48struct StructType[T] {
49mut:
50val T
51}
52
53fn test_struct_with_bool_to_map() {
54array_of_struct := [StructType[bool]{
55val: true
56}, StructType[bool]{
57val: false
58}]
59
60mut array_of_map := []json.Any{}
61
62for variable in array_of_struct {
63array_of_map << json.map_from(variable)
64}
65
66assert array_of_map.str() == '[{"val":true},{"val":false}]'
67}
68
69fn test_struct_with_string_to_map() {
70array_of_struct := [StructType[string]{
71val: 'true'
72}, StructType[string]{
73val: 'false'
74}]
75
76mut array_of_map := []json.Any{}
77
78for variable in array_of_struct {
79array_of_map << json.map_from(variable)
80}
81
82assert array_of_map.str() == '[{"val":"true"},{"val":"false"}]'
83}
84
85fn test_struct_with_array_to_map() {
86array_of_struct := [StructType[[]bool]{
87val: [false, true]
88}, StructType[[]bool]{
89val: [true, false]
90}]
91
92mut array_of_map := []json.Any{}
93
94for variable in array_of_struct {
95array_of_map << json.map_from(variable)
96}
97
98assert array_of_map.str() == '[{"val":[false,true]},{"val":[true,false]}]'
99}
100
101fn test_struct_with_number_to_map() {
102assert json.map_from(StructType[string]{'3'}).str() == '{"val":"3"}'
103assert json.map_from(StructType[bool]{true}).str() == '{"val":true}'
104assert json.map_from(StructType[i8]{3}).str() == '{"val":3}'
105assert json.map_from(StructType[i16]{3}).str() == '{"val":3}'
106assert json.map_from(StructType[int]{3}).str() == '{"val":3}'
107assert json.map_from(StructType[i64]{3}).str() == '{"val":3}'
108assert json.map_from(StructType[i8]{-3}).str() == '{"val":-3}'
109assert json.map_from(StructType[i16]{i16(-3)}).str() == '{"val":-3}'
110assert json.map_from(StructType[int]{-3}).str() == '{"val":-3}'
111assert json.map_from(StructType[i64]{-3}).str() == '{"val":-3}'
112assert json.map_from(StructType[f32]{3.0}).str() == '{"val":3.0}'
113assert json.map_from(StructType[f64]{3.0}).str() == '{"val":3.0}'
114assert json.map_from(StructType[u8]{3}).str() == '{"val":3}'
115assert json.map_from(StructType[u16]{3}).str() == '{"val":3}'
116assert json.map_from(StructType[u32]{3}).str() == '{"val":3}'
117assert json.map_from(StructType[u64]{3}).str() == '{"val":3}'
118}
119
120fn test_struct_with_struct_to_map() {
121assert json.map_from(StructType[StructType[string]]{StructType[string]{'3'}}).str() == '{"val":{"val":"3"}}'
122assert json.map_from(StructType[StructType[int]]{StructType[int]{3}}).str() == '{"val":{"val":3}}'
123}
124
125fn test_maps() {
126assert json.decode[map[string]string]('{"test":"abc"}')! == {
127'test': 'abc'
128}
129
130// assert json.decode[map[string]StructType[bool]]('{"test":{"val":true}}') or {
131// dump(err)
132// assert false
133// } == {"test":StructType[bool]{true}}
134}
135