Example #1
0
static size_t
write_json(json_t* json, stream_t* stream)
{
    switch (json_typeof(json)) {
        case JSON_OBJECT:  return write_object(json, stream);
        case JSON_ARRAY:   return write_array(json, stream);
        case JSON_STRING:  return write_string(json, stream);
        case JSON_INTEGER: return write_integer(json, stream);
        case JSON_REAL:    return write_real(json, stream);
        case JSON_TRUE:    return write_true(json, stream);
        case JSON_FALSE:   return write_false(json, stream);
        case JSON_NULL:    return write_null(json, stream);
        default:           return 0;
    }
}
Example #2
0
void JsonOut::null_member(const std::string &name)
{
    member(name);
    write_null();
}
Example #3
0
void DremelWriter::write(Document* doc)
{
	write_long(Document::kDocIdFieldNumber, doc->docid(), 0, 0);

	if (!doc->has_links()) //links is null
	{
		write_null(Document_Links::kBackwardFieldNumber, 0, 0);
		write_null(Document_Links::kForwardFieldNumber, 0, 0);
	}
	else
	{
		Document_Links* links = doc->mutable_links();
		if (links->backward_size() == 0)
		{
			write_null(Document_Links::kBackwardFieldNumber, 0, 1);
		}
		else
		{
			write_long(Document_Links::kBackwardFieldNumber, links->backward(0), 0, 2);
			for (int i = 1; i < links->backward_size(); i++)
			{
				write_long(Document_Links::kBackwardFieldNumber, links->backward(i), 1, 2);
			}
		}

		if (links->forward_size() == 0)
		{
			write_null(Document_Links::kForwardFieldNumber, 0, 1);
		}
		else
		{
			write_long(Document_Links::kForwardFieldNumber, links->forward(0), 0, 2);
			for (int i = 1; i < links->forward_size(); i++)
			{
				write_long(Document_Links::kForwardFieldNumber, links->forward(i), 1, 2);
			}
		}
	}

	int name_count = doc->name_size();
	if (name_count == 0)
	{
		write_null(Document_Name_Language::kCodeFieldNumber, 0, 0);
		write_null(Document_Name_Language::kCountryFieldNumber, 0, 0);
		write_null(Document_Name::kUrlFieldNumber, 0, 0);
	}
	else
	{
		char rep = 0;

		for (int i = 0; i < name_count; i++)
		{
			if (i > 0) rep = 1;

			Document_Name* name = doc->mutable_name(i);
			if (!name->has_url())
			{
				write_null(Document_Name::kUrlFieldNumber, rep, 1);
			}
			else
			{
				write_string(Document_Name::kUrlFieldNumber, name->url(), rep, 2);
			}

			if (name->language_size() == 0)
			{
				write_null(Document_Name_Language::kCodeFieldNumber, rep, 1);
				write_null(Document_Name_Language::kCountryFieldNumber, rep, 1);
			}
			else
			{
				for (int j = 0; j < name->language_size(); j++)
				{
					if (j > 0) rep = 2;
					Document_Name_Language* language = name->mutable_language(j);
					if (!language->has_country())
					{
						write_null(Document_Name_Language::kCountryFieldNumber, rep, 2);
					}
					else
					{
						write_string(Document_Name_Language::kCountryFieldNumber, language->country(), rep, 3);
					}

					write_string(Document_Name_Language::kCodeFieldNumber, language->code(), rep, 2);
				}
			}
		}
	}

	/* write data for extended part to files*/

	write_long(Document::kSessionIDFieldNumber, doc->sessionid(), 0, 0);
	write_long(Document::kUserIDFieldNumber, doc->userid(), 0, 0);
	write_long(Document::kUserGroupFieldNumber, doc->usergroup(), 0, 0);
	write_int(Document::kClientIPFieldNumber, doc->clientip(), 0, 0);

	if (!doc->has_country()) write_null(Document::kCountryFieldNumber, 0, 0); //BUG
	//write_null(Document::kCountryFieldNumber, 0, -1); //BUG
	else write_string(Document::kCountryFieldNumber, doc->country(), 0, 1);

	if (!doc->has_agent()) write_null(Document::kAgentFieldNumber, 0, 0); //BUG
	//write_null(Document::kAgentFieldNumber, 0, -1); //BUG
	else write_string(Document::kAgentFieldNumber, doc->agent(), 0, 1);

	if (!doc->has_sales())
	{
		write_null(Document_Sales::kProductIdFieldNumber, 0, 0);
		write_null(Document_Sales::kProductNameFieldNumber, 0, 0);
		write_null(Document_Sales::kSaleFieldNumber, 0, 0);
	}
	else
	{
		Document_Sales* sale = doc->mutable_sales();
		write_int(Document_Sales::kProductIdFieldNumber, sale->productid(), 0, 1);
		write_string(Document_Sales::kProductNameFieldNumber, sale->productname(), 0, 1);
		write_int(Document_Sales::kSaleFieldNumber, sale->sale(), 0, 1);
	}

	int request_count = doc->requests_size();

	if (request_count == 0)
	{
		write_null(Document_Requests::kRequestIDFieldNumber, 0, 0);
		write_null(Document_Requests::kRequestTimeFieldNumber, 0, 0);
		write_null(Document_Requests::kResponseTimeFieldNumber, 0, 0);
		write_null(Document_Requests::kURLFieldNumber, 0, 0);
		write_null(Document_Requests::kRequestDataFieldNumber, 0, 0);
	}
	else
	{
		char rep = 0;
		for (int i = 0; i < request_count; i++)
		{
			if (i > 0) rep = 1;
			Document_Requests* request = doc->mutable_requests(i);
			write_long(Document_Requests::kRequestIDFieldNumber, request->requestid(), rep, 1);
			write_long(Document_Requests::kRequestTimeFieldNumber, request->requesttime(), rep, 1);
			write_long(Document_Requests::kResponseTimeFieldNumber, request->responsetime(), rep, 1);
			write_string(Document_Requests::kURLFieldNumber, request->url(), rep, 1);
			write_string(Document_Requests::kRequestDataFieldNumber, request->requestdata(), rep, 1);
		}
	}
}