Parsing JSON in Zig

Mattepuffo's logo
Parsing JSON in Zig

Parsing JSON in Zig

In questo articolo vediamo come fare il parsing di dati JSON in Zig.

Il JSON sarà cablato nel codice, nel senso che non lo prenderemo da remoto.

Faremo due esempi:

  • il primo è un semplice oggetto
  • il secondo è un array di oggetti

Cominciamo dal primo:

const std = @import("std");

const User = struct { name: []u8, age: u16 };

pub fn main() !void {
    var gpa = std.heap.GeneralPurposeAllocator(.{}){};
    defer _ = gpa.deinit();
    const allocator = gpa.allocator();

    const parsed = try std.json.parseFromSlice(User, allocator,
        \\{ "name": "Matteo", "age": 41 }
    , .{});

    defer parsed.deinit();

    const user = parsed.value;

    std.debug.print("Nome {s}, età {}\n", .{ user.name, user.age });
}

Qui sotto il secondo:

const std = @import("std");

const User = struct { name: []u8, age: u16 };
const Result = struct { data: []User };

pub fn main() !void {
    var gpa = std.heap.GeneralPurposeAllocator(.{}){};
    defer _ = gpa.deinit();
    const allocator = gpa.allocator();

    const json_text = 
        \\{ "data": [{"name": "Matteo", "age": 41}, {"name": "Franco", "age": 45}] }
    ;

    const parsed = try std.json.parseFromSlice(Result, allocator, json_text, .{});
    defer parsed.deinit();

    const results = parsed.value;

    for (results.data) |u| {
        std.debug.print("Nome {s}, età {}\n", .{ u.name, u.age });
    }
}

Enjoy!


Condividi

Commentami!