Esempio n. 1
0
/******************************************************************************
 * FunctionName : jsonparse_object
 * Description  : 
 * Parameters   : 
*******************************************************************************/
LOCAL void ICACHE_FLASH_ATTR jsonparse_object(struct jsonparse_state *parser, int *pos, int *len) {
	*pos = parser->pos;
	*len = 0;
	
	int depth = parser->depth;
	int json_type = jsonparse_get_type(parser);
	
	while (json_type != '}' && parser->depth != depth-1) {
		json_type = jsonparse_next(parser);
	}
	
	if (json_type == '}') {
		*len = parser->pos - *pos + 1;
	}
}
Esempio n. 2
0
/*--------------------------------------------------------------------*/
int
jsonparse_next(struct jsonparse_state *state)
{
  char c;
  char s;

  skip_ws(state);
  c = state->json[state->pos];
  s = jsonparse_get_type(state);
  state->pos++;

  switch(c) {
  case '{':
    push(state, c);
    return c;
  case '}':
    if(s == ':' && state->vtype != 0) {
/*       printf("Popping vtype: '%c'\n", state->vtype); */
      pop(state);
      s = jsonparse_get_type(state);
    }
    if(s == '{') {
      pop(state);
    } else {
      state->error = JSON_ERROR_SYNTAX;
      return JSON_TYPE_ERROR;
    }
    return c;
  case ']':
    if(s == '[') {
      pop(state);
    } else {
      state->error = JSON_ERROR_UNEXPECTED_END_OF_ARRAY;
      return JSON_TYPE_ERROR;
    }
    return c;
  case ':':
    push(state, c);
    return c;
  case ',':
    /* if x:y ... , */
    if(s == ':' && state->vtype != 0) {
      pop(state);
    } else if(s == '[') {
      /* ok! */
    } else {
      state->error = JSON_ERROR_SYNTAX;
      return JSON_TYPE_ERROR;
    }
    return c;
  case '"':
    if(s == '{' || s == '[' || s == ':') {
      atomic(state, c = (s == '{' ? JSON_TYPE_PAIR_NAME : c));
    } else {
      state->error = JSON_ERROR_UNEXPECTED_STRING;
      return JSON_TYPE_ERROR;
    }
    return c;
  case '[':
    if(s == '{' || s == '[' || s == ':') {
      push(state, c);
    } else {
      state->error = JSON_ERROR_UNEXPECTED_ARRAY;
      return JSON_TYPE_ERROR;
    }
    return c;
  default:
    if(s == ':' || s == '[') {
      if(c <= '9' && c >= '0') {
        atomic(state, JSON_TYPE_NUMBER);
        return JSON_TYPE_NUMBER;
      }
    }
  }
  return 0;
}