JSON处理
JSON解码
V语言内置高性能JSON编解码,通过代码生成替代运行时反射:
import json
struct User {
name string @[required] // 必填字段(缺失则解码失败)
age int // 非必填(缺失时用默认值0)
@[skip] // 跳过此字段
meta map[string]string
@[json: 'lastName'] // 字段别名
last_name string
}
data := `{"name": "Frodo", "lastName": "Baggins", "age": 25}`
user := json.decode(User, data) or {
panic("解码失败: ${err}")
}
println(user.last_name) // "Baggins"
数组解码:
arr_data := `[{"x":123}, {"x":456}]`
items := json.decode([]Foo, arr_data)!
println(items[0].x) // 123
JSON编码
struct User {
name string
score i64
}
// 结构体编码
user := User{name: "Pierre", score: 1024}
println(json.encode(user)) // {"name":"Pierre","score":1024}
// 映射编码
mut data := map[string]int{}
data["x"] = 42
data["y"] = 360
println(json.encode(data)) // {"x":42,"y":360}
高级特性:
- 匿名结构支持:处理多层嵌套JSON
- 空值处理:
null
解码为字段零值 - 自定义规则:
@[required]
:强制字段校验@[skip]
:编码/解码时跳过字段@[json: 'fieldName']
:字段别名映射
错误处理
// 安全解码
decoded := json.decode(User, input) or {
// 处理错误(类型不匹配/必填字段缺失等)
return
}
// 链式操作
user := json.decode(User, raw_data) ?