5 static int printjson(Fmt*, JSON*, int);
6 static int printarray(Fmt*, JSON*, int);
7 static int printobject(Fmt*, JSON*, int);
10 printarray(Fmt *f, JSON *j, int indent)
16 return fmtprint(f, "[]");
18 r = fmtprint(f, "[\n");
19 for(jl = j->first; jl != nil; jl = jl->next){
20 for(i = 0; i < indent; i++)
21 r += fmtprint(f, "\t");
22 r += printjson(f, jl->val, indent);
23 r += fmtprint(f, "%s\n", jl->next != nil ? "," : "");
25 for(i = 0; i < indent-1; i++)
26 r += fmtprint(f, "\t");
27 r += fmtprint(f, "]");
32 printobject(Fmt *f, JSON *j, int indent)
38 return fmtprint(f, "{}");
40 r = fmtprint(f, "{\n");
41 for(jl = j->first; jl != nil; jl = jl->next){
42 for(i = 0; i < indent; i++)
44 r += fmtprint(f, "\"%s\": ", jl->name);
45 r += printjson(f, jl->val, indent);
46 r += fmtprint(f, "%s\n", jl->next != nil ? "," : "");
48 for(i = 0; i < indent-1; i++)
49 r += fmtprint(f, "\t");
50 r += fmtprint(f, "}");
55 printjson(Fmt *f, JSON *j, int indent)
59 return fmtprint(f, "null");
62 return fmtprint(f, "%s", j->n ? "true" : "false");
65 return fmtprint(f, "%f", j->n);
68 return fmtprint(f, "\"%s\"", j->s);
71 return printarray(f, j, indent+1);
74 return printobject(f, j, indent+1);
85 j = va_arg(f->args, JSON*);
86 return printjson(f, j, 0);
92 fmtinstall('J', JSONfmt);