blob: 73d78862197a06adb1690ab650f26d7f6e8ef437 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
const std = @import("std");
const jq = @import("zgjq").jq;
const jv = @import("zgjq").jv;
pub fn main() !void {
const allocator = std.heap.smp_allocator;
const args = try std.process.argsAlloc(allocator);
defer std.process.argsFree(allocator, args);
if (args.len < 2) {
try std.fs.File.stderr().writeAll("usage: zgjq <query>\n");
std.process.exit(1);
}
const query = args[1];
const input = try std.fs.File.stdin().readToEndAlloc(allocator, std.math.maxInt(usize));
defer allocator.free(input);
const parsed = try jv.parse(allocator, input);
defer parsed.deinit();
const json = parsed.value;
var runtime = try jq.Runtime.init(allocator);
defer runtime.deinit();
try runtime.compileFromSlice(query);
try runtime.start(json);
const stdout = std.fs.File.stdout();
while (try runtime.next()) |result| {
const output = try jv.stringify(allocator, result);
defer allocator.free(output);
try stdout.writeAll(output);
try stdout.writeAll("\n");
}
}
|