/* This file is part of the YAZ toolkit.
- * Copyright (C) 1995-2009 Index Data.
+ * Copyright (C) Index Data.
* All rights reserved.
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
struct json_node {
enum json_node_type type;
union {
- char *string;
- double number;
+ char *string;
+ double number;
struct json_node *link[2];
} u;
};
/** \brief returns parser error
\param p JSON parser handle
- \returns parse error msg
+ \returns parse error msg
This function should be called if json_parser_parse returns NULL .
*/
YAZ_EXPORT
const char *json_parser_get_errmsg(json_parser_t p);
+/** \brief returns parser position
+ \param p JSON parser handle
+ \returns number of bytes read from parser
+
+ This function should be called if json_parser_parse returns NULL .
+*/
+YAZ_EXPORT
+size_t json_parser_get_position(json_parser_t p);
+
+/** \brief parses JSON string
+ \param json_str JSON string
+ \param errmsg pointer to error message string
+ \returns JSON tree or NULL if parse error occurred.
+
+ The resulting tree should be removed with a call to json_remove_node.
+ The errmsg may be NULL in which case the error message is not returned.
+*/
+YAZ_EXPORT
+struct json_node *json_parse(const char *json_str, const char **errmsg);
+
+/** \brief parses JSON string
+ \param json_str JSON string
+ \param errmsg pointer to error message string
+ \param pos position of parser stop (probably error)
+ \returns JSON tree or NULL if parse error occurred.
+
+ The resulting tree should be removed with a call to json_remove_node.
+ The errmsg may be NULL in which case the error message is not returned.
+*/
+YAZ_EXPORT
+struct json_node *json_parse2(const char *json_str, const char **errmsg,
+ size_t *pos);
+
/** \brief destroys JSON tree node and its children
\param n JSON node
*/
YAZ_EXPORT
void json_remove_node(struct json_node *n);
+/** \brief gets object pair value for some name
+ \param n JSON node (presumably object node)
+ \param name name to match
+ \returns node or NULL if not found
+*/
+YAZ_EXPORT
+struct json_node *json_get_object(struct json_node *n, const char *name);
+
+/** \brief gets object value and detaches from existing tree
+ \param n JSON node (presumably object node)
+ \param name name to match
+ \returns node or NULL if not found
+*/
+YAZ_EXPORT
+struct json_node *json_detach_object(struct json_node *n, const char *name);
+
+/** \brief gets array element
+ \param n JSON node (presumably array node)
+ \param idx (0=first, 1=second, ..)
+ \returns node or NULL if not found
+*/
+YAZ_EXPORT
+struct json_node *json_get_elem(struct json_node *n, int idx);
+
+/** \brief returns number of children (array or object)
+ \param n JSON node (presumably array node or object node)
+ \returns number of children
+*/
+YAZ_EXPORT
+int json_count_children(struct json_node *n);
+
+/** \brief appends array to another
+ \param dst original array and resulting array
+ \param src array to be appended to dst
+ \retval -1 not arrays
+ \retval 0 array appended OK
+*/
+YAZ_EXPORT
+int json_append_array(struct json_node *dst, struct json_node *src);
+
+/** \brief configure subst rule
+ \param p JSON parser
+ \param idx (%id)
+ \param n node to be substituted for idx (%idx)
+*/
+YAZ_EXPORT
+void json_parser_subst(json_parser_t p, int idx, struct json_node *n);
+
/** \brief converts JSON tree to JSON string
\param node JSON tree
\param result resulting JSON string buffer
YAZ_EXPORT
void json_write_wrbuf(struct json_node *node, WRBUF result);
+/** \brief writes JSON tree with indentation (pretty print)
+ \param node JSON tree
+ \param result resulting JSON string buffer
+*/
+YAZ_EXPORT
+void json_write_wrbuf_pretty(struct json_node *node, WRBUF result);
+
YAZ_END_CDECL
#endif