Пример #1
0
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())+"'");
        }
    }
}
Пример #2
0
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;
  }
}