v / vlib / json / README.md
88 lines · 71 sloc · 2.49 KB · 9970ecb8359e59127afad499fa3d3b955a4d38af
Raw

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

Large i64 and u64 values are encoded as exact decimal JSON numbers, and json.decode preserves those integer values when reading decimal integer input.

Struct fields of type time.Time can be decoded from either a JSON number or from a JSON string in ISO 8601, RFC 3339, or Unix-timestamp form.

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'
    // the JSON property is omitted while the field keeps its zero/default value
    notes string @[omitempty]
}

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
}

JSON field attributes

The json module supports a few field attributes for controlling how struct fields map to JSON: