YAJL 2.0.0
Typedefs | Enumerations | Functions
yajl_gen.h File Reference
#include <yajl/yajl_common.h>
#include <stddef.h>

Go to the source code of this file.

Typedefs

typedef struct yajl_gen_t * yajl_gen
typedef void(* yajl_print_t )(void *ctx, const char *str, size_t len)

Enumerations

enum  yajl_gen_status {
  yajl_gen_status_ok = 0, yajl_gen_keys_must_be_strings, yajl_max_depth_exceeded, yajl_gen_in_error_state,
  yajl_gen_generation_complete, yajl_gen_invalid_number, yajl_gen_no_buf, yajl_gen_invalid_string
}
enum  yajl_gen_option { yajl_gen_beautify = 0x01, yajl_gen_indent_string = 0x02, yajl_gen_print_callback = 0x04, yajl_gen_validate_utf8 = 0x08 }

Functions

YAJL_API int yajl_gen_config (yajl_gen g, yajl_gen_option opt,...)
YAJL_API yajl_gen yajl_gen_alloc (const yajl_alloc_funcs *allocFuncs)
YAJL_API void yajl_gen_free (yajl_gen handle)
YAJL_API yajl_gen_status yajl_gen_integer (yajl_gen hand, long long int number)
YAJL_API yajl_gen_status yajl_gen_double (yajl_gen hand, double number)
YAJL_API yajl_gen_status yajl_gen_number (yajl_gen hand, const char *num, size_t len)
YAJL_API yajl_gen_status yajl_gen_string (yajl_gen hand, const unsigned char *str, size_t len)
YAJL_API yajl_gen_status yajl_gen_null (yajl_gen hand)
YAJL_API yajl_gen_status yajl_gen_bool (yajl_gen hand, int boolean)
YAJL_API yajl_gen_status yajl_gen_map_open (yajl_gen hand)
YAJL_API yajl_gen_status yajl_gen_map_close (yajl_gen hand)
YAJL_API yajl_gen_status yajl_gen_array_open (yajl_gen hand)
YAJL_API yajl_gen_status yajl_gen_array_close (yajl_gen hand)
YAJL_API yajl_gen_status yajl_gen_get_buf (yajl_gen hand, const unsigned char **buf, size_t *len)
YAJL_API void yajl_gen_clear (yajl_gen hand)

Detailed Description

Interface to YAJL's JSON generation facilities.


Typedef Documentation

typedef struct yajl_gen_t* yajl_gen

an opaque handle to a generator

Examples:
reformatter/json_reformat.c.
typedef void(* yajl_print_t)(void *ctx, const char *str, size_t len)

a callback used for "printing" the results.


Enumeration Type Documentation

configuration parameters for the parser, these may be passed to yajl_gen_config() along with option specific argument(s). In general, all configuration parameters default to *off*.

Enumerator:
yajl_gen_beautify 

generate indented (beautiful) output

yajl_gen_indent_string 

Set an indent string which is used when yajl_gen_beautify is enabled. Maybe something like \t or some number of spaces. The default is four spaces ' '.

yajl_gen_print_callback 

Set a function and context argument that should be used to output generated json. the function should conform to the yajl_print_t prototype while the context argument is a void * of your choosing.

example: yajl_gen_config(g, yajl_gen_print_callback, myFunc, myVoidPtr);

yajl_gen_validate_utf8 

Normally the generator does not validate that strings you pass to it via yajl_gen_string() are valid UTF8. Enabling this option will cause it to do so.

generator status codes

Enumerator:
yajl_gen_status_ok 

no error

yajl_gen_keys_must_be_strings 

at a point where a map key is generated, a function other than yajl_gen_string was called

yajl_max_depth_exceeded 

YAJL's maximum generation depth was exceeded. see YAJL_MAX_DEPTH

yajl_gen_in_error_state 

A generator function (yajl_gen_XXX) was called while in an error state

yajl_gen_generation_complete 

A complete JSON document has been generated

yajl_gen_invalid_number 

yajl_gen_double was passed an invalid floating point value (infinity or NaN).

yajl_gen_no_buf 

A print callback was passed in, so there is no internal buffer to get from

yajl_gen_invalid_string 

returned from yajl_gen_string() when the yajl_gen_validate_utf8 option is enabled and an invalid was passed by client code.


Function Documentation

YAJL_API yajl_gen yajl_gen_alloc ( const yajl_alloc_funcs allocFuncs)

allocate a generator handle

Parameters:
allocFuncsan optional pointer to a structure which allows the client to overide the memory allocation used by yajl. May be NULL, in which case malloc/free/realloc will be used.
Returns:
an allocated handle on success, NULL on failure (bad params)
Examples:
reformatter/json_reformat.c.
YAJL_API yajl_gen_status yajl_gen_array_close ( yajl_gen  hand)
YAJL_API yajl_gen_status yajl_gen_array_open ( yajl_gen  hand)
YAJL_API yajl_gen_status yajl_gen_bool ( yajl_gen  hand,
int  boolean 
)
YAJL_API void yajl_gen_clear ( yajl_gen  hand)

clear yajl's output buffer, but maintain all internal generation state. This function will not "reset" the generator state, and is intended to enable incremental JSON outputing.

Examples:
reformatter/json_reformat.c.
YAJL_API int yajl_gen_config ( yajl_gen  g,
yajl_gen_option  opt,
  ... 
)

allow the modification of generator options subsequent to handle allocation (via yajl_alloc)

Returns:
zero in case of errors, non-zero otherwise
Examples:
reformatter/json_reformat.c.
YAJL_API yajl_gen_status yajl_gen_double ( yajl_gen  hand,
double  number 
)

generate a floating point number. number may not be infinity or NaN, as these have no representation in JSON. In these cases the generator will return 'yajl_gen_invalid_number'

YAJL_API void yajl_gen_free ( yajl_gen  handle)

free a generator handle

Examples:
reformatter/json_reformat.c.
YAJL_API yajl_gen_status yajl_gen_get_buf ( yajl_gen  hand,
const unsigned char **  buf,
size_t *  len 
)

access the null terminated generator buffer. If incrementally outputing JSON, one should call yajl_gen_clear to clear the buffer. This allows stream generation.

Examples:
reformatter/json_reformat.c.
YAJL_API yajl_gen_status yajl_gen_integer ( yajl_gen  hand,
long long int  number 
)
YAJL_API yajl_gen_status yajl_gen_map_close ( yajl_gen  hand)
YAJL_API yajl_gen_status yajl_gen_map_open ( yajl_gen  hand)
YAJL_API yajl_gen_status yajl_gen_null ( yajl_gen  hand)
YAJL_API yajl_gen_status yajl_gen_number ( yajl_gen  hand,
const char *  num,
size_t  len 
)
YAJL_API yajl_gen_status yajl_gen_string ( yajl_gen  hand,
const unsigned char *  str,
size_t  len 
)