Exemple #1
0
Error JSON::_parse_value(Variant &value,Token& token,const CharType *p_str,int &index, int p_len,int &line,String &r_err_str) {


	if (token.type==TK_CURLY_BRACKET_OPEN) {

		Dictionary d;
		Error err = _parse_object(d,p_str,index,p_len,line,r_err_str);
		if (err)
			return err;
		value=d;
		return OK;
	} else if (token.type==TK_BRACKET_OPEN) {

		Array a;
		Error err = _parse_array(a,p_str,index,p_len,line,r_err_str);
		if (err)
			return err;
		value=a;
		return OK;

	} else if (token.type==TK_IDENTIFIER) {

		String id = token.value;
		if (id=="true")
			value=true;
		else if (id=="false")
			value=false;
		else if (id=="null")
			value=Variant();
		else {
			r_err_str="Expected 'true','false' or 'null', got '"+id+"'.";
			return ERR_PARSE_ERROR;
		}
		return OK;

	} else if (token.type==TK_NUMBER) {

		value=token.value;
		return OK;
	} else if (token.type==TK_STRING) {

		value=token.value;
		return OK;
	} else {
		r_err_str="Expected value, got "+String(tk_name[token.type])+".";
		return ERR_PARSE_ERROR;
	}

	return ERR_PARSE_ERROR;
}
Exemple #2
0
static GstAmfNode *
_parse_value (AmfParser * parser)
{
  GstAmfNode *node = NULL;
  GstAmfType type;

  type = _parse_u8 (parser);
  node = gst_amf_node_new (type);

  GST_DEBUG ("parsing type %d", type);

  switch (type) {
    case GST_AMF_TYPE_NUMBER:
      gst_amf_node_set_number (node, _parse_number (parser));
      break;
    case GST_AMF_TYPE_BOOLEAN:
      gst_amf_node_set_boolean (node, _parse_u8 (parser));
      break;
    case GST_AMF_TYPE_STRING:
      gst_amf_node_set_string_take (node, _parse_utf8_string (parser));
      break;
    case GST_AMF_TYPE_OBJECT:
      _parse_object (parser, node);
      break;
    case GST_AMF_TYPE_MOVIECLIP:
      GST_ERROR ("unimplemented AMF type: movie clip");
      break;
    case GST_AMF_TYPE_NULL:
      break;
    case GST_AMF_TYPE_ECMA_ARRAY:
      _parse_ecma_array (parser, node);
      break;
    case GST_AMF_TYPE_OBJECT_END:
      break;
    default:
      GST_ERROR ("unimplemented AMF type %d", type);
      break;
  }

  return node;
}
Exemple #3
0
Error JSON::parse(const String& p_json,Dictionary& r_ret,String &r_err_str,int &r_err_line) {


	const CharType *str = p_json.ptr();
	int idx = 0;
	int len = p_json.length();
	Token token;
	int line=0;
	String aux_key;

	Error err = _get_token(str,idx,len,token,line,r_err_str);
	if (err)
		return err;

	if (token.type!=TK_CURLY_BRACKET_OPEN) {

		r_err_str="Expected '{'";
		return ERR_PARSE_ERROR;
	}

	return _parse_object(r_ret,str,idx,len,r_err_line,r_err_str);

}