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
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
*/
return n;
}
-struct json_node *json_parse(const char *json_str, const char **errmsg)
+struct json_node *json_parse2(const char *json_str, const char **errmsg,
+ size_t *pos)
{
json_parser_t p = json_parser_create();
struct json_node *n = 0;
n = json_parser_parse(p, json_str);
if (!n && errmsg)
*errmsg = json_parser_get_errmsg(p);
+ if (pos)
+ *pos = json_parser_get_position(p);
json_parser_destroy(p);
}
return n;
}
+struct json_node *json_parse(const char *json_str, const char **errmsg)
+{
+ return json_parse2(json_str, errmsg, 0);
+}
+
void json_write_wrbuf(struct json_node *node, WRBUF result)
{
switch (node->type)
return p->err_msg;
}
+size_t json_parser_get_position(json_parser_t p)
+{
+ return p->cp - p->buf;
+}
+
/*
* Local variables:
* c-basic-offset: 4