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; } }
void JsonOut::null_member(const std::string &name) { member(name); write_null(); }
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); } } }