X-Git-Url: http://git.indexdata.com/?p=yaz-moved-to-github.git;a=blobdiff_plain;f=include%2Fyaz%2Fjson.h;h=aab0159726a15b1999be28e5fcdbf838d3a99f32;hp=4cefba37f8f56064f6eb32230f85bd867c7b40eb;hb=d2ed898832ae354c17254ff52c70c92278518efe;hpb=bf4af27e54345e280223257161448ace0f0b1d67 diff --git a/include/yaz/json.h b/include/yaz/json.h index 4cefba3..aab0159 100644 --- a/include/yaz/json.h +++ b/include/yaz/json.h @@ -1,5 +1,5 @@ /* 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: @@ -53,8 +53,8 @@ enum json_node_type { struct json_node { enum json_node_type type; union { - char *string; - double number; + char *string; + double number; struct json_node *link[2]; } u; }; @@ -86,13 +86,22 @@ struct json_node *json_parser_parse(json_parser_t p, const char *json_str); /** \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 @@ -104,6 +113,19 @@ const char *json_parser_get_errmsg(json_parser_t p); 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 */ @@ -153,7 +175,7 @@ int json_append_array(struct json_node *dst, struct json_node *src); /** \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); @@ -165,6 +187,20 @@ 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