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}

高级特性:

  1. 匿名结构支持:处理多层嵌套JSON
  2. 空值处理null 解码为字段零值
  3. 自定义规则
    • @[required]:强制字段校验
    • @[skip]:编码/解码时跳过字段
    • @[json: 'fieldName']:字段别名映射

错误处理

// 安全解码
decoded := json.decode(User, input) or {
    // 处理错误(类型不匹配/必填字段缺失等)
    return
}

// 链式操作
user := json.decode(User, raw_data) ?