Skip to content

JSON

JSON parsing and serialization utilities.

Import

zig
const api = @import("api");
const json = api.json;

Function Summary

FunctionDescription
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) !T

Parses 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) ![]u8

Converts 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) ![]u8

Stringifies with default options.

toPrettyJson

zig
pub fn toPrettyJson(allocator: Allocator, value: anytype) ![]u8

Stringifies with pretty printing.

zig
const str = try json.toPrettyJson(allocator, user);
// {
//   "id": 1,
//   "name": "John"
// }

isValid

zig
pub fn isValid(input: []const u8) bool

Checks if a string is valid JSON.

zig
json.isValid("{\"valid\":true}")  // true
json.isValid("{invalid")          // false

escapeString

zig
pub fn escapeString(allocator: Allocator, input: []const u8) ![]u8

Escapes 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);
}

Released under the MIT License.