.TH JSON 2 .SH NAME jsonparse, jsonfree, jsonbyname, jsonstr \- JSON parser .SH SYNOPSIS .\" .ta 0.75i 1.5i 2.25i 3i 3.75i 4.5i .ta 0.7i +0.7i +0.7i +0.7i +0.7i +0.7i +0.7i .EX #include #include #include enum { JSONNull, JSONBool, JSONNumber, JSONString, JSONArray, JSONObject, }; typedef struct JSONEl JSONEl; struct JSONEl { char *name; JSON *val; JSONEl *next; }; typedef struct JSON JSON; struct JSON { int t; union { double n; char *s; JSONEl *first; }; }; JSON* jsonparse(char *s); void jsonfree(JSON *j); JSON* jsonbyname(JSON *j, char *s); char* jsonstr(JSON *j); int JSONfmt(Fmt *f) void JSONfmtinstall(void); .EE .SH DESCRIPTION The .B JSON structure represents a variant json value. The variant type is stored in the .I t member of the structure. String values use .BR s , booleans and numbers use the .B n members in the structure. Arrays and objects (dictionaries) are represented by a singly-linked list of .B JSONEl structures referred to from the .B first pointer in the .B JSON structure. Each .B JSONEl has a .B val pointer to the associated value and a .B next pointer to the next element in the array or object. Dictionary objects have the .B name member set to the key of the association. .P A json object is parsed by calling .I jsonparse with a .B UTF-8 string of the json encoded data. On success, a non-nil pointer to a newly allocated .B JSON structure is returned. To free the parsed objects, .I jsonfree has to be called. .P The .I jsonbyname function returns the associated value of a dictionary item. .P The function .I jsonstr returns the string value of a json object or .B nil for any other object type. .P .I JSONfmt is a .IR print (2) formatting routine that prints a well-formatted JSON structure. It can be installed by hand but .I JSONfmtinstall installs it under the standard format character J. The header .B contains a #pragma statement so the compiler can type-check uses of .B %J in .IR print (2) format strings. .SH SOURCE .B /sys/src/libjson .SH DIAGNOSTICS The functions .I jsonparse, .I jsonbyname and .I jsonstr return .B nil on error and set an error string (see .IR errstr (2)).