shithub: riscv

ref: 0b849750505a43d27deb1defcd8910193d066481
dir: /sys/man/2/json/

View raw version
.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 <u.h>
#include <libc.h>
#include <json.h>

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 <json.h>
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)).