Пример #1
0
static ZZJSON *parse_value(ZZJSON_CONFIG *config) {
    ZZJSON *retval = NULL;
    int c;

    SKIPWS();
    c = GETC();
    UNGETC(c);
    switch (c) {
        case '"':   retval = parse_string2(config); break;
        case '0': case '1': case '2': case '3': case '4': case '5':
        case '6': case '7': case '8': case '9': case '-':
                    retval = parse_number(config); break;
        case '{':   retval = parse_object(config); break;
        case '[':   retval = parse_array(config); break;
        case 't':   retval = parse_true(config); break;
        case 'f':   retval = parse_false(config); break;
        case 'n':   retval = parse_null(config); break;
    }

    if (!retval) {
        ERROR("value: invalid value");
        return retval;
    }

    return retval;
}
Пример #2
0
int parse_value(const char** input, JzonValue* output, JzonAllocator* allocator)
{
	skip_whitespace(input);
	char ch = current(input);

	switch (ch)
	{
		case '{': return parse_object(input, output, false, allocator);
		case '[': return parse_array(input, output, allocator);
		case '"': return parse_string(input, output, allocator);
		case '-': return parse_number(input, output);
		case 'f': return parse_false(input, output);
		case 't': return parse_true(input, output);
		case 'n': return parse_null(input, output);
		default: return ch >= '0' && ch <= '9' ? parse_number(input, output) : -1;
	}
}
Пример #3
0
void json::parse_value( std::istream_iterator<char> &it, std::istream_iterator<char> &end, int &line )
{
	skip_whitespace( it, end, line );

	if ( it == end )
	{
		clear();
		return;
	}

	switch ( *it )
	{
		case '[':
			parse_array( it, end, line );
			break;

		case '{':
			parse_object( it, end, line );
			break;

		case '"':
			parse_string( it, end, line );
			break;

		case 't':
			parse_true( it, end, line );
			break;

		case 'f':
			parse_false( it, end, line );
			break;

		case 'n':
			parse_null( it, end, line );
			break;

		default:
			parse_number( it, end, line );
	}
}
Пример #4
0
void json_parser<_Handler>::value()
{
    char c = cur_char();
    if (is_numeric(c))
    {
        number();
        return;
    }

    switch (c)
    {
        case '-':
            number();
        break;
        case '[':
            array();
        break;
        case '{':
            object();
        break;
        case 't':
            parse_true();
            m_handler.boolean_true();
        break;
        case 'f':
            parse_false();
            m_handler.boolean_false();
        break;
        case 'n':
            parse_null();
            m_handler.null();
        break;
        case '"':
            string();
        break;
        default:
            json::parse_error::throw_with("value: failed to parse '", cur_char(), "'.", offset());
    }
}