vector<shared_ptr<FDSBucket> > GalaxyFDSClient::listBuckets() { string uri = formatUri(_pConfig->getBaseUri(), "", _emptySubResources); URI pocoUri(uri); shared_ptr<HTTPClientSession> pSession(_pSessionFacotry ->createClientSession(pocoUri)); pSession->setHost(pocoUri.getHost()); pSession->setPort(pocoUri.getPort()); HTTPRequest request(HTTPRequest::HTTP_GET, uri, HTTPMessage::HTTP_1_1); prepareRequestHeaders(uri, HTTPRequest::HTTP_GET, "", _emptyStream, *_pEmptyMetadata, request); HTTPResponse response; ostream& os = pSession->sendRequest(request); istream& rs = pSession->receiveResponse(response); if (response.getStatus() != HTTPResponse::HTTP_OK) { stringstream msg; msg << "List buckets failed, status=" << response.getStatus() << ", reason="; StreamCopier::copyStream(rs, msg); throw GalaxyFDSClientException(response.getStatus(), msg.str()); } vector<shared_ptr<FDSBucket> > res; Parser parser; parser.parse(rs); Var result = parser.result(); Object::Ptr pObject = result.extract<Object::Ptr>(); Object::Ptr pOwnerObject = pObject->getObject("owner"); stringstream ss; pOwnerObject->stringify(ss); shared_ptr<Owner> pOwner = Owner::deserialize(ss); Array::Ptr pBucketsArray = pObject->getArray("buckets"); for (size_t i = 0; i < pBucketsArray->size(); i++) { string bucketName = pBucketsArray->getObject(i)->getValue<string>("name"); shared_ptr<FDSBucket> pBucket(new FDSBucket(bucketName)); pBucket->setOwner(*pOwner); res.push_back(pBucket); } return res; }
void RandomVar::ReadFromJSON(const char* fileName) { Parser loParser; std::ifstream t(fileName); std::stringstream buffer; buffer << t.rdbuf(); string json = buffer.str(); // Parse the JSON and get the Results Poco::Dynamic::Var loParsedJson = loParser.parse(json); Poco::Dynamic::Var loParsedJsonResult = loParser.result(); // Random variable data are an array of objects //[ // {"value": 1, "probability" : 0.2, "cumulative" : 0.2}, // {"value": 2, "probability" : 0.2, "cumulative" : 0.4}, // {"value": 3, "probability" : 0.2, "cumulative" : 0.6}, // {"value": 4, "probability" : 0.2, "cumulative" : 0.8}, // {"value": 5, "probability" : 0.2, "cumulative" : 1.0} //] Array::Ptr arr = loParsedJsonResult.extract<Array::Ptr>(); size_t size = arr->size(); m_P.resize(size); m_C.resize(size); m_X.resize(size); // Individual data rows Object::Ptr object; for (size_t i = 0; i < size; i++) { object = arr->getObject(i); this->setX(i, object->getValue<double>("value")); this->setP(i, object->getValue<double>("probability")); this->setC(i, object->getValue<double>("cumulative")); } return; }
void JSONTest::testNestedArray() { std::string json = "[[[[]]]]"; Parser parser; Var result; try { DefaultHandler handler; parser.setHandler(&handler); parser.parse(json); result = handler.result(); } catch(JSONException& jsone) { std::cout << jsone.message() << std::endl; assert(false); } assert(result.type() == typeid(Array::Ptr)); Array::Ptr array = result.extract<Array::Ptr>(); assert(array->size() == 1); }