/* This file is part of the YAZ toolkit.
- * Copyright (C) 1995-2009 Index Data.
+ * Copyright (C) 1995-2013 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
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
*/
/** \brief configure subst rule
\param p JSON parser
\param idx (%id)
- \param node node to be substituted for idx (%idx)
+ \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);
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);
+
+/** \brief writes JSON text to WRBUF with escaping
+ \param b result
+ \param str input string to be encoded
+*/
+YAZ_EXPORT
+void wrbuf_json_puts(WRBUF b, const char *str);
+
YAZ_END_CDECL
#endif