def _get_callback_data(yajl_version):
    return  [
        # Mapping of JSON parser events to callback C types and value converters.
        # Used to define the Callbacks structure and actual callback functions
        # inside the parse function.
        ('null', 'null', C_EMPTY, lambda: None),
        ('boolean', 'boolean', C_INT, lambda v: bool(v)),
        ('integer', 'number', C_LONG if yajl_version == 1 else C_LONGLONG, lambda v: int(v)),
        ('double', 'number', C_DOUBLE, lambda v: v),
        ('number', 'number', C_STR, lambda v, l: common.integer_or_decimal(b2s(string_at(v, l)))),
        ('string', 'string', C_STR, lambda v, l: string_at(v, l).decode('utf-8')),
        ('start_map', 'start_map', C_EMPTY, lambda: None),
        ('map_key', 'map_key', C_STR, lambda v, l: string_at(v, l).decode('utf-8')),
        ('end_map', 'end_map', C_EMPTY, lambda: None),
        ('start_array', 'start_array', C_EMPTY, lambda: None),
        ('end_array', 'end_array', C_EMPTY, lambda: None),
    ]
示例#2
0
C_EMPTY = CFUNCTYPE(c_int, c_void_p)
C_INT = CFUNCTYPE(c_int, c_void_p, c_int)
C_LONG = CFUNCTYPE(c_int, c_void_p, c_long)
C_DOUBLE = CFUNCTYPE(c_int, c_void_p, c_double)
C_STR = CFUNCTYPE(c_int, c_void_p, POINTER(c_ubyte), c_uint)

_callback_data = [
    # Mapping of JSON parser events to callback C types and value converters.
    # Used to define the Callbacks structure and actual callback functions
    # inside the parse function.
    ('null', 'null', C_EMPTY, lambda: None),
    ('boolean', 'boolean', C_INT, lambda v: bool(v)),
    ('integer', 'number', C_LONG, lambda v: v),
    ('double', 'number', C_DOUBLE, lambda v: v),
    ('number', 'number', C_STR,
     lambda v, l: common.integer_or_decimal(b2s(string_at(v, l)))),
    ('string', 'string', C_STR, lambda v, l: string_at(v, l).decode('utf-8')),
    ('start_map', 'start_map', C_EMPTY, lambda: None),
    ('map_key', 'map_key', C_STR,
     lambda v, l: string_at(v, l).decode('utf-8')),
    ('end_map', 'end_map', C_EMPTY, lambda: None),
    ('start_array', 'start_array', C_EMPTY, lambda: None),
    ('end_array', 'end_array', C_EMPTY, lambda: None),
]


class Callbacks(Structure):
    _fields_ = [(name, type) for name, _, type, _ in _callback_data]


YAJL_OK = 0
示例#3
0
def number(val, length):
    return common.integer_or_decimal(b2s(ffi.string(val, maxlen=length)))