Value load(std::istream& ss) { // Parse a JSON entity, using the inputstream ss parseWhitespace(ss); switch (ss.peek()) { case '{': return parseObject(ss); case '[': return parseArray(ss); case '"': return parseString(ss); case 't': return parseTrue(ss); case 'f': return parseFalse(ss); case 'n': return parseNull(ss); case '-': return parseNumber(ss); default: if(isdigit(ss.peek())) { return parseNumber(ss); } else { throw ParseError(std::string("unexpected token: '")+char(ss.peek())+"'"); } } }
void json_value::deserialize(std::stringstream &input, memory_pool &pool) { assert(m_type == JSON_UNINIT); input >> std::ws; char c = input.peek(); switch(c) { case '{': m_type = JSON_OBJECT; parseObject(input, pool); break; case '[': m_type = JSON_ARRAY; parseArray(input, pool); break; case '"': m_type = JSON_STRING; parseString(input, pool); break; case 't': case 'f': m_type = JSON_BOOL; parseBool(input); break; case 'n': m_type = JSON_NULL; parseNull(input); break; default: m_type = JSON_NUMBER; parseNumber(input); break; } }