コード例 #1
0
ファイル: JSON.cpp プロジェクト: w3c/wot-arduino
JSON * JSON::parse_array(Lexer *lexer)
{
    JSON *array = new_array();
    unsigned int index = 0;
    
    if (lexer->end_of_array())
        return array;  // empty array
        
    for (;;)
    {
        JSON *item = parse_private(lexer);
    
        if (item)
            array->insert_array_item(index++, item);
        else
        {
            Serial.println(F("missing array item"));
            break;
        }
 
        Json_Token token = lexer->get_token();
        
        if (token == Array_stop_token)
            return array;
            
        if (token != Comma_token)
            break;
    }

    Serial.println(F("JSON syntax error in array"));
    return null;
}
コード例 #2
0
ファイル: JSON.cpp プロジェクト: w3c/wot-arduino
JSON * JSON::parse(const char *src, Names *table)
{
    Lexer lexer;
    lexer.src = src;
    lexer.length = Strings::strlen(src);
    lexer.table = table;
    
    return parse_private(&lexer);
}
コード例 #3
0
ファイル: JSON.cpp プロジェクト: w3c/wot-arduino
JSON * JSON::parse(const __FlashStringHelper *src, Names *table)
{
    Lexer lexer;
    lexer.src = ((char *)src)+PROGMEM_BOUNDARY;
    lexer.length = Strings::strlen(lexer.src);
    lexer.table = table;
        
    return parse_private(&lexer);
}
コード例 #4
0
ファイル: JSON.cpp プロジェクト: Rjoydip/wot-arduino
JSON * JSON::parse(const char *src, unsigned int length, Names *names)
{
    Lexer lexer;
    lexer.src = (unsigned char *)src;
    lexer.length = length;
    lexer.names = names;
    
#ifdef DEBUG
    PRINT(F("parsing ")); PRINTLN(src);
#endif
    return parse_private(&lexer);
}
コード例 #5
0
ファイル: JSON.cpp プロジェクト: Rjoydip/wot-arduino
JSON * JSON::parse_object(Lexer *lexer)
{
    unsigned int symcount = JSON_SYMBOL_BASE;
    JSON *object = new_object();
    Json_Token token = lexer->get_token();
    
    while (token != Error_token)
    {
        if (token == Object_stop_token)
            return object;
            
        if (token != String_token)
            break;
            
        unsigned int symbol = lexer->names->get_symbol(lexer->token_src,
                                        lexer->token_len, &symcount);
                                        
        token = lexer->get_token();
        
        if (token != Colon_token)
            break;
        
        JSON *value = parse_private(lexer);
        
        if (!value)
            break;
            
        object->insert_property(symbol, value);
        token = lexer->get_token();
        
        if (token == Object_stop_token)
            continue;
            
        if (token != Comma_token)
            break;
            
        token = lexer->get_token();
    }
    
    // free incomplete object here along with its map from symbols to values
    
#ifdef DEBUG
    PRINT(F("JSON syntax error in object, token is ")); PRINTLN(token);
#endif
    return null;
}
コード例 #6
0
ファイル: JSON.cpp プロジェクト: w3c/wot-arduino
JSON * JSON::parse_object(Lexer *lexer)
{
    JSON *object = new_object();
    Json_Token token = lexer->get_token();
    
    while (token != Error_token)
    {
        if (token == Object_stop_token)
            return object;
            
        if (token != String_token)
            break;
            
        Symbol symbol = lexer->table->symbol(lexer->token_src,
                                        lexer->token_len);
                                        
        token = lexer->get_token();
        
        if (token != Colon_token)
            break;
        
        JSON *value = parse_private(lexer);
        
        if (!value)
            break;
            
        object->insert_property(symbol, value);
        token = lexer->get_token();
        
        if (token == Object_stop_token)
            continue;
            
        if (token != Comma_token)
            break;
            
        token = lexer->get_token();
    }
    
    // free incomplete object here along with its map from symbols to values

    Serial.print(F("JSON syntax error in object, token is ")); Serial.println(token);
    return null;
}