This is the same example I used in my previous post, but using iterators instead of the list of member names:
#include <iostream> #include "jsoncpp/json.h" using namespace std; int main(int argc, char **argv) { Json::Value change; Json::Value minParameters; Json::Value minParametersAnm; minParameters["MinimumRMS"] = 0.2; minParameters["sgbUpdated"] = true; change["Minimizer"] = minParameters; minParametersAnm["MinimumRMS"] = 0.5; minParametersAnm["sgbUpdated"] = false; change["Minimizer::ANM"] = minParametersAnm; cout<<"Traverse members of: "<<endl <<"\"change\":"<<endl <<change.toStyledString()<<endl<<endl; Json::Value::iterator it = change.begin(); cout<<"List of members:"<<endl; for(Json::Value::iterator it = change.begin(); it !=change.end(); ++it) { Json::Value key = it.key(); Json::Value value = (*it); cout<<"Key: "<<key.toStyledString(); cout<<"Value: "<<value.toStyledString(); } return 0; }Note the use of the key() method to get the key of the Json::Value from the iterator. Also note how we need to dereferentiate the iterator to get the Json::Value from the iterator.
Ok, so, I compiled it doing:
g++ -o test_iterator_members test_iterator_members.cpp -ljson_linux-gcc-4.4.5_libmtAnd I executed it and got this result:
Traverse members of: "change": { "Minimizer" : { "MinimumRMS" : 0.20, "sgbUpdated" : true }, "Minimizer::ANM" : { "MinimumRMS" : 0.50, "sgbUpdated" : false } } List of members: Key: "Minimizer" Value: { "MinimumRMS" : 0.20, "sgbUpdated" : true } Key: "Minimizer::ANM" Value: { "MinimumRMS" : 0.50, "sgbUpdated" : false }
That was helpful Thank you . But further I want to actually compare two json string and check if it is qual or not and the json string will be passed as parameters to my function and then I have to parse it , but I am unable to compare the entire two Json. Can you help me with that please? Thank you in advance.
ReplyDelete