X-Git-Url: http://git.indexdata.com/?p=yaz-moved-to-github.git;a=blobdiff_plain;f=include%2Fyaz%2Fjson.h;h=5c53d70378730a4d2692e64c6eaf11755eb0da53;hp=b56ee4ce94ba67674b0504f6eddcd697cff1805d;hb=108a41cd16f10f21aad2bcdb74525ec4d5c94b34;hpb=8cd41e6a09e7279587dc29774669fbc13685566d diff --git a/include/yaz/json.h b/include/yaz/json.h index b56ee4c..5c53d70 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-2011 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: @@ -93,12 +93,93 @@ struct json_node *json_parser_parse(json_parser_t p, const char *json_str); 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 @@ -106,6 +187,13 @@ void json_remove_node(struct json_node *n); YAZ_EXPORT void json_write_wrbuf(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