v/vlib/json/json_test.v

116 lines
2.2 KiB
V
Raw Normal View History

import json
2019-06-27 14:28:12 +02:00
enum JobTitle {
manager
executive
worker
}
struct Employee {
name string
2020-05-21 22:35:43 +02:00
age int
2020-05-31 13:17:20 +02:00
salary f32
title JobTitle
}
fn test_simple() {
x := Employee{'Peter', 28, 95000.5, .worker}
s := json.encode(x)
2020-05-31 13:17:20 +02:00
eprintln('Employee x: $s')
assert s == '{"name":"Peter","age":28,"salary":95000.5,"title":2}'
y := json.decode(Employee, s) or {
assert false
2020-05-21 22:35:43 +02:00
Employee{}
}
2020-05-31 13:17:20 +02:00
eprintln('Employee y: $y')
assert y.name == 'Peter'
assert y.age == 28
2020-05-31 13:17:20 +02:00
assert y.salary == 95000.5
assert y.title == .worker
}
2020-05-05 14:41:24 +02:00
struct User2 {
2020-05-21 22:35:43 +02:00
age int
nums []int
2020-05-05 14:41:24 +02:00
}
2020-05-05 13:23:29 +02:00
2019-06-27 14:28:12 +02:00
struct User {
2020-05-21 22:35:43 +02:00
age int
nums []int
last_name string [json:lastName]
is_registered bool [json:IsRegistered]
typ int [json:'type']
pets string [raw; json:'pet_animals']
2019-06-27 14:28:12 +02:00
}
fn test_parse_user() {
s := '{"age": 10, "nums": [1,2,3], "type": 1, "lastName": "Johnson", "IsRegistered": true, "pet_animals": {"name": "Bob", "animal": "Dog"}}'
2020-05-05 14:41:24 +02:00
u2 := json.decode(User2, s) or {
exit(1)
}
println(u2)
2019-06-27 14:28:12 +02:00
u := json.decode(User, s) or {
exit(1)
2019-06-27 14:28:12 +02:00
}
2020-05-05 13:23:29 +02:00
println(u)
2019-06-27 14:28:12 +02:00
assert u.age == 10
assert u.last_name == 'Johnson'
assert u.is_registered == true
2019-06-27 14:28:12 +02:00
assert u.nums.len == 3
assert u.nums[0] == 1
assert u.nums[1] == 2
assert u.nums[2] == 3
assert u.typ == 1
assert u.pets == '{"name":"Bob","animal":"Dog"}'
2019-06-27 14:28:12 +02:00
}
2020-05-21 22:35:43 +02:00
fn test_encode_user() {
usr := User{
age: 10
nums: [1, 2, 3]
last_name: 'Johnson'
is_registered: true
typ: 0
pets: 'foo'
}
expected := '{"age":10,"nums":[1,2,3],"lastName":"Johnson","IsRegistered":true,"type":0,"pet_animals":"foo"}'
out := json.encode(usr)
2020-05-05 14:54:12 +02:00
println(out)
assert out == expected
}
2019-08-22 13:22:16 +02:00
struct Color {
2020-05-21 22:35:43 +02:00
space string
point string [raw]
2019-08-22 13:22:16 +02:00
}
fn test_raw_json_field() {
2020-05-21 22:35:43 +02:00
color := json.decode(Color, '{"space": "YCbCr", "point": {"Y": 123}}') or {
println('text')
return
}
assert color.point == '{"Y":123}'
assert color.space == 'YCbCr'
2019-08-22 13:22:16 +02:00
}
2020-05-05 14:54:12 +02:00
struct City {
name string
}
struct Country {
cities []City
2020-05-21 22:35:43 +02:00
name string
}
fn test_struct_in_struct() {
country := json.decode(Country, '{ "name": "UK", "cities": [{"name":"London"}, {"name":"Manchester"}]}') or {
assert false
exit(1)
}
assert country.name == 'UK'
assert country.cities.len == 2
assert country.cities[0].name == 'London'
assert country.cities[1].name == 'Manchester'
println(country.cities)
}