Correct usage of Poco C++ JSON for parsing data
EDIT: as of 1.5.2, things were simplified by making DefaultHandler, well ... default (and renaming it to its proper name - ParseHandler. So, if all you need is parsing, no need to explicitly provide the handler anymore:
// objectsstd::string json = "{ \"test\" : { \"property\" : \"value\" } }";Parser parser;Var result = parser.parse(json);Object::Ptr object = result.extract<Object::Ptr>();Var test = object->get("test");object = test.extract<Object::Ptr>();test = object->get("property");std::string value = test.convert<std::string>();// array of objectsstd::string json = "[ {\"test\" : 0}, { \"test1\" : [1, 2, 3], \"test2\" : 4 } ]";Parser parser;Var result = parser.parse(json);Array::Ptr arr = result.extract<Array::Ptr>();Object::Ptr object = arr->getObject(0);//assert (object->getValue<int>("test") == 0);object = arr->getObject(1);arr = object->getArray("test1");result = arr->get(0);assert (result == 1);
See this answer for more details.
#include <iostream>#include <string>#include <Poco/JSON/JSON.h>#include <Poco/JSON/Parser.h>#include <Poco/Dynamic/Var.h>using namespace std;using namespace Poco::JSON;string GetValue(Object::Ptr aoJsonObject, const char *aszKey) { Poco::Dynamic::Var loVariable; string lsReturn; string lsKey(aszKey); // Get the member Variable // loVariable = aoJsonObject->get(lsKey); // Get the Value from the Variable // lsReturn = loVariable.convert<std::string>(); return lsReturn;}int main(int argc, char *argv[]) { string lsJson; Parser loParser; lsJson = "{\"TransactionCode\":\"000000\",\"FileRecordSequenceNumber\":\"111111\",\"TcrSequenceNumber\":\"222222\",\"TransactionRouteIndicator\":\"ABCDE\",\"MerchantEstablishmentNumber\":\"00000000000\",\"MerchantName\":\"BBBBBBBBB\",\"MerchantCity\":\"CCCCCCCC\"}"; cout << lsJson << endl; // Parse the JSON and get the Results // Poco::Dynamic::Var loParsedJson = loParser.parse(lsJson); Poco::Dynamic::Var loParsedJsonResult = loParser.result(); // Get the JSON Object // Object::Ptr loJsonObject = loParsedJsonResult.extract<Object::Ptr>(); // Get the values for the member variables // // cout << "TransactionCode " << GetValue(loJsonObject, "TransactionCode") << endl; cout << "FileRecordSequenceNumber " << GetValue(loJsonObject, "FileRecordSequenceNumber") << endl; cout << "TcrSequenceNumber " << GetValue(loJsonObject, "TcrSequenceNumber") << endl; cout << "TransactionRouteIndicator " << GetValue(loJsonObject, "TransactionRouteIndicator") << endl; cout << "MerchantEstablishmentNumber " << GetValue(loJsonObject, "MerchantEstablishmentNumber") << endl; cout << "MerchantName " << GetValue(loJsonObject, "MerchantName") << endl; cout << "MerchantCity " << GetValue(loJsonObject, "MerchantCity") << endl; return 0;}Results:{"TransactionCode":"000000","FileRecordSequenceNumber":"111111","TcrSequenceNumber":"222222","TransactionRouteIndicator":"ABCDE","MerchantEstablishmentNumber":"00000000000","MerchantName":"BBBBBBBBB","MerchantCity":"CCCCCCCC"}TransactionCode 000000FileRecordSequenceNumber 111111TcrSequenceNumber 222222TransactionRouteIndicator ABCDEMerchantEstablishmentNumber 00000000000MerchantName BBBBBBBBBMerchantCity CCCCCCCC