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!
zig json
Commentami!