void iterateArray(Value::ConstValueIterator& itr, Value::ConstValueIterator& itrEnd, StringBuffer *buffer, Writer<StringBuffer> *writer, stringstream& ss) { for (; itr != itrEnd; itr++) { if (itr->IsObject()) { Value::ConstMemberIterator itr_ = itr->MemberBegin(); Value::ConstMemberIterator itrEnd_ = itr->MemberEnd(); iterateObject(itr_, itrEnd_, buffer, writer, ss); } else if (itr->IsArray()) { Value::ConstValueIterator itr_ = itr->Begin(); Value::ConstValueIterator itrEnd_ = itr->End(); iterateArray(itr_, itrEnd_, buffer, writer, ss); } else if (itr->IsBool()) { ss << DELIM << itr->GetBool(); } else if (itr->IsInt()) { ss << DELIM << itr->GetInt(); } else if (itr->IsInt64()) { ss << DELIM << itr->GetInt64(); } else if (itr->IsDouble()) { ss << DELIM << itr->GetDouble(); } else if (itr->IsString()) { ss << DELIM << "\"" << itr->GetString() << "\""; } else { throw runtime_error(string("Case missing from tokenizer")); } } }
void JSONArray::_parseRapidJSONArray(void *value) { rapidjson::Value *rapidjsonValue = (rapidjson::Value *)value; for (Value::ConstValueIterator currentValue = rapidjsonValue->Begin(); currentValue != rapidjsonValue->End(); ++currentValue) switch (currentValue->GetType()) { case kNullType: break; case kFalseType: case kTrueType: this->appendValue(shared_ptr<JSONNumber> (new JSONNumber(kTrueType ? true: false))); break; case kObjectType: { shared_ptr<JSONObject> obj(new JSONObject()); obj->_parseRapidJSONObject((void*)currentValue); this->appendValue(obj); } break; case kArrayType: { shared_ptr<JSONArray> obj(new JSONArray()); obj->_parseRapidJSONArray((void*)currentValue); this->appendValue(obj); } break; case kStringType: this->appendValue(shared_ptr<JSONString> (new JSONString(currentValue->GetString()))); break; case kNumberType: if (rapidjsonValue->IsDouble()) { this->appendValue(shared_ptr<JSONNumber> (new JSONNumber(currentValue->GetDouble()))); } else if (rapidjsonValue->IsInt() || currentValue->IsInt64()) { this->appendValue(shared_ptr<JSONNumber> (new JSONNumber(currentValue->GetInt()))); } else if (currentValue->IsUint() || currentValue->IsUint64()) { this->appendValue(shared_ptr<JSONNumber> (new JSONNumber(currentValue->GetUint()))); } break; } }