Exemplo n.º 1
0
		result_t ParseJsonArray(v8::Local<v8::Value> &retVal)
		{
			v8::Local<v8::Array> elements = v8::Array::New(isolate->m_isolate);
			int32_t cnt = 0;
			result_t hr;

			AdvanceSkipWhitespace();

			if (c0_ != ']')
			{
				do {
					v8::Local<v8::Value> element;
					hr = ParseJsonValue(element);
					if (hr < 0)
						return hr;
					elements->Set(cnt ++, element);
				} while (MatchSkipWhiteSpace(','));

				if (c0_ != ']')
					return ReportUnexpectedCharacter();
			}

			AdvanceSkipWhitespace();
			retVal = elements;
			return 0;
		}
Exemplo n.º 2
0
		result_t ParseJsonObject(v8::Local<v8::Value> &retVal)
		{
			v8::Local<v8::Object> json_object = v8::Object::New(isolate->m_isolate);
			result_t hr;

			AdvanceSkipWhitespace();
			if (c0_ != '}')
			{
				do {
					if (c0_ != '"')
						return ReportUnexpectedCharacter();

					v8::Local<v8::Value> key;
					v8::Local<v8::Value> value;

					hr = ParseJsonString(key);
					if (hr < 0)
						return hr;

					if (c0_ != ':')
						return ReportUnexpectedCharacter();

					AdvanceSkipWhitespace();

					hr = ParseJsonValue(value);
					if (hr < 0)
						return hr;

					json_object->Set(key, value);
				} while (MatchSkipWhiteSpace(','));

				if (c0_ != '}')
					return ReportUnexpectedCharacter();
			}

			AdvanceSkipWhitespace();

			v8::Local<v8::Value> type = json_object->Get(isolate->NewFromUtf8("type"));
			v8::Local<v8::Value> data = json_object->Get(isolate->NewFromUtf8("data"));

			if (!type.IsEmpty() && !data.IsEmpty())
			{
				v8::String::Utf8Value str(type);

				if (*str)
				{
					int32_t i;

					for (i = 0; s_from[i].name; i++)
						if (!qstrcmp(*str, s_from[i].name))
						{
							s_from[i].from(isolate, data, json_object);
							break;
						}
				}
			}

			retVal = json_object;
			return 0;
		}
Exemplo n.º 3
0
		result_t ParseJsonObject(v8::Local<v8::Value> &retVal)
		{
			v8::Local<v8::Object> json_object = v8::Object::New(isolate->m_isolate);
			result_t hr;

			AdvanceSkipWhitespace();
			if (c0_ != '}')
			{
				do {
					if (c0_ != '"')
						return ReportUnexpectedCharacter();

					v8::Local<v8::Value> key;
					v8::Local<v8::Value> value;

					hr = ParseJsonString(key);
					if (hr < 0)
						return hr;

					if (c0_ != ':')
						return ReportUnexpectedCharacter();

					AdvanceSkipWhitespace();

					hr = ParseJsonValue(value);
					if (hr < 0)
						return hr;

					json_object->Set(key, value);
				} while (MatchSkipWhiteSpace(','));

				if (c0_ != '}')
					return ReportUnexpectedCharacter();
			}

			AdvanceSkipWhitespace();
			retVal = json_object;
			return 0;
		}