void JsonReader::ParseValue() { log_trace(); // Look at the next character to determine the type of parsing to perform switch (is_.Peek()) { case 'n': ParseNull(); break; case 't': ParseTrue(); break; case 'f': ParseFalse(); break; case '"': ParseString(); break; case '{': ParseMap(); break; case '[': ParseArray(); break; default : ParseNumber(); } }
Json* Json::Parser::ParsePrimary(){ NextChar(); Kind kind = KindPreview(ch); Json* json = NULL; switch(kind){ case kString: { json = ParseString(); break;} case kNumber: { json = ParseNumber(); break;} case kFalse: { json = ParseFalse(); break; } case kTrue: { json = ParseTrue(); break; } case kArray: { json = ParseArray(); break; } case kObject: { json = ParseObject(); break; } case kNull: break; default: break; }; return json; }
static void ParseValue( JsnHandler* reader, JsnStreamIn* stream, const JsnFragment& name ) { switch( stream->Peek() ) { case 't': ParseTrue( stream ); reader->AddProperty( name, JsnFragment( kJsn_True ) ); break; case 'f': ParseFalse( stream ); reader->AddProperty( name, JsnFragment( kJsn_False ) ); break; case 'n': ParseNull( stream ); reader->AddProperty( name, JsnFragment( kJsn_Null ) ); break; case '"': { JsnFragment value = ParseString( stream ); reader->AddProperty( name, value ); break; } case '-': case '.': case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': { JsnFragment value = ParseNumber( stream ); reader->AddProperty( name, value ); break; } case '[': { JsnHandler* child_reader = reader->BeginArray( name ); ParseArray( child_reader, stream ); reader->EndArray( child_reader ); break; } case '{': { JsnHandler* child_reader = reader->BeginObject( name ); ParseObject( child_reader, stream ); reader->EndObject( child_reader ); break; } default: stream->SetError( "Unexpected character" ); break; } }