1 /* This file is part of the YAZ toolkit.
2 * Copyright (C) 1995-2009 Index Data.
4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of Index Data nor the names of its contributors
13 * may be used to endorse or promote products derived from this
14 * software without specific prior written permission.
16 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
25 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 \brief Header for JSON functions
34 #include <yaz/wrbuf.h>
38 /** \brief JSON node type for json_node */
40 json_node_object, /**< JSON object, u.link[0] is object content */
41 json_node_array, /**< JSON array, u.link[0] is array content */
42 json_node_list, /**< JSON elements or JSON members,
43 u.link[0] is value, u.link[1] is next elemen in list */
44 json_node_pair, /**< JSON pair, u.link[0] is name, u.link[1] is value */
45 json_node_string, /**< JSON string, u.string is content */
46 json_node_number, /**< JSON number (floating point), u.number is content */
47 json_node_true, /**< JSON true */
48 json_node_false, /**< JSON false */
49 json_node_null /**< JSON null */
52 /** \brief JSON node */
54 enum json_node_type type;
58 struct json_node *link[2];
62 /** \brief JSON parser (opaque) */
63 typedef struct json_parser_s *json_parser_t;
65 /** \brief create JSON parser
66 \returns JSON parser handle
69 json_parser_t json_parser_create(void);
71 /** \brief destroys JSON parser
72 \param p JSON parser handle
75 void json_parser_destroy(json_parser_t p);
77 /** \brief parses JSON string
78 \param p JSON parser handle
79 \param json_str JSON string
80 \returns JSON tree or NULL if parse error occurred.
82 The resulting tree should be removed with a call to json_remove_node.
85 struct json_node *json_parser_parse(json_parser_t p, const char *json_str);
87 /** \brief returns parser error
88 \param p JSON parser handle
89 \returns parse error msg
91 This function should be called if json_parser_parse returns NULL .
94 const char *json_parser_get_errmsg(json_parser_t p);
96 /** \brief destroys JSON tree node and its children
100 void json_remove_node(struct json_node *n);
102 /** \brief converts JSON tree to JSON string
103 \param node JSON tree
104 \param result resulting JSON string buffer
107 void json_write_wrbuf(struct json_node *node, WRBUF result);
116 * c-file-style: "Stroustrup"
117 * indent-tabs-mode: nil
119 * vim: shiftwidth=4 tabstop=8 expandtab