JSON
JSON parsing and serialization utilities.
Import
zig
const api = @import("api");
const json = api.json;Function Summary
| Function | Description |
|---|---|
parse(T, allocator, str) | Parse JSON string to typed struct |
parseValue(allocator, str) | Parse JSON to dynamic value |
stringify(allocator, value, opts) | Convert value to JSON string |
toJson(allocator, value) | Stringify with defaults |
toPrettyJson(allocator, value) | Stringify with formatting |
isValid(str) | Check if string is valid JSON |
escapeString(allocator, str) | Escape special characters |
Functions
parse
zig
pub fn parse(comptime T: type, allocator: Allocator, input: []const u8) !TParses JSON into a typed struct.
zig
const User = struct {
id: u32,
name: []const u8,
};
const user = try json.parse(User, allocator, "{\"id\":1,\"name\":\"John\"}");
// user.id = 1
// user.name = "John"Input: {"id":1,"name":"John"}Result: User{ .id = 1, .name = "John" }
parseValue
zig
pub fn parseValue(allocator: Allocator, input: []const u8) !std.json.Parsed(Value)Parses JSON into a dynamic Value.
zig
const parsed = try json.parseValue(allocator, input);
defer parsed.deinit();
const id = parsed.value.object.get("id").?.integer;stringify
zig
pub fn stringify(allocator: Allocator, value: anytype, options: StringifyOptions) ![]u8Converts a value to JSON.
zig
const user = .{ .id = 1, .name = "John" };
const str = try json.stringify(allocator, user, .{});
defer allocator.free(str);
// {"id":1,"name":"John"}toJson
zig
pub fn toJson(allocator: Allocator, value: anytype) ![]u8Stringifies with default options.
toPrettyJson
zig
pub fn toPrettyJson(allocator: Allocator, value: anytype) ![]u8Stringifies with pretty printing.
zig
const str = try json.toPrettyJson(allocator, user);
// {
// "id": 1,
// "name": "John"
// }isValid
zig
pub fn isValid(input: []const u8) boolChecks if a string is valid JSON.
zig
json.isValid("{\"valid\":true}") // true
json.isValid("{invalid") // falseescapeString
zig
pub fn escapeString(allocator: Allocator, input: []const u8) ![]u8Escapes a string for JSON.
zig
const escaped = try json.escapeString(allocator, "hello\nworld");
// "hello\\nworld"Example
zig
fn createUser(ctx: *api.Context) api.Response {
const body = ctx.body();
if (!api.json.isValid(body)) {
return api.Response.err(.bad_request, "{\"error\":\"Invalid JSON\"}");
}
const User = struct { name: []const u8 };
const user = api.json.parse(User, ctx.allocator, body) catch {
return api.Response.err(.bad_request, "{\"error\":\"Parse error\"}");
};
_ = user;
return api.Response.jsonRaw("{\"created\":true}")
.setStatus(.created);
}