YAJL 2.0.1
Typedefs | Enumerations | Functions

yajl_gen.h File Reference

#include <yajl/yajl_common.h>
#include <stddef.h>

Go to the source code of this file.


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


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,
  yajl_gen_escape_solidus = 0x10


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

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*.


generate indented (beautiful) output


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 ' '.


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);


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.


the forward solidus (slash or '/' in human) is not required to be escaped in json text. By default, YAJL will not escape it in the iterest of saving bytes. Setting this flag will cause YAJL to always escape '/' in generated JSON strings.

generator status codes


no error


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


YAJL's maximum generation depth was exceeded. see YAJL_MAX_DEPTH


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


A complete JSON document has been generated


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


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


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

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.
an allocated handle on success, NULL on failure (bad params)
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.

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)

zero in case of errors, non-zero otherwise
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

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.

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