I am a little stuck here can anyone help please.
#include <iostream>
#include "include/rapidjson/document.h"
#include "include/rapidjson/writer.h"
#include "include/rapidjson/prettywriter.h"
//#include "include/rapidjson/stringbuffer.h"
using namespace std;
using namespace rapidjson;
class test {
public:
static bool isEqual(const string &item1, const string &item2, const string &temp) {
Document d1;
d1.Parse(item1.c_str());
Document d2;
d2.Parse(item2.c_str());
Document d3;
d3.Parse(temp.c_str());
bool a = true;
bool b = isJsonEqual(d1, d2, d3, a);
}
static bool isJsonEqual(Value &v, Value &v1, Value &v2, bool &a) {
/*
StringBuffer buffer;
PrettyWriter<StringBuffer> writer(buffer);
v.Accept(writer);
//cout<<buffer.GetString()<<endl;
StringBuffer b1;
PrettyWriter<StringBuffer> writer1(b1);
v1.Accept(writer1);
//cout<<b1.GetString()<<endl;
StringBuffer b2;
PrettyWriter<StringBuffer> writer2(b2);
v2.Accept(writer2);
//cout<<b2.GetString()<<endl;
*/
for (auto itr = v2.MemberBegin(); itr != v2.MemberEnd(); itr++) {
if (itr->value.IsArray()) {
StringBuffer b3;
PrettyWriter<StringBuffer> writer3(b3);
v2[itr->name].Accept(writer3);
cout << b3.GetString() << endl;
auto c = itr->name.GetString();
cout << c << endl;
//isJsonEqual(v[itr->name],v1[itr->name],v2[itr->name],a);
} else if (v.HasMember(itr->name) && v1.HasMember(itr->name)) {
// cout<<itr->name.GetString()<<endl;
if ((v[itr->name]) != v1[itr->name]) {
a = false;
break;
}
}
}
}
};
int main() {
const char *input1 = "{ \"array\": [ 1, 2, 3 ],
\"boolean\": true, \"null\": null, \"number\": 123, \"object\": {
\"a\": \"b\", \"c\": \"d\", \"e\": \"f\" }, \"string\":
\"Hello World\", \"object_array\": [ {\"key\": \"value1\" },
{\"key\": \"value2\" }, {\"key\": \"value3\" } ],
\"deep_nested_array\": [ {\"object_array1\": [ {\"key\":
\"value1\" }, {\"key\": \"value2\" }, {\"key\": \"value3\" }
]}, {\"object_array2\": [ {\"key\": \"value4\" },
{\"key\": \"value5\" }, {\"key\": \"value6\" } ]} ]}";
const char *input2= "{ \"array\": [ 1, 2, 3 ],
\"justsomedata\": true, \"boolean\": true, \"null\": null,
\"object\": { \"a\": \"b\", \"c\": \"d\", \"e\": \"f\" },
\"number\": 123, \"object_array\": [ {\"whatever\": \"test\",
\"key\": \"value1\" }, {\"key\": \"value2\" }, {\"key\":
\"value3\" } ], \"deep_nested_array\": [
{\"object_array1\": [ {\"key\": \"value1\" }, {\"key\":
\"value2\" }, {\"key\": \"value3\" } ]},
{\"object_array2\": [ {\"key\": \"value4\" }, {\"key\":
\"value5\" }, {\"key\": \"value6\", \"ignoreme\": 12346 } ]}
], \"string\": \"Hello World\"}";
const char *temp = "{ \"array\": [ null ], \"boolean\": null,
\"null\": null, \"object\": { \"a\": null, \"c\": null,
\"e\": null }, \"number\": null, \"object_array\": [ {\"key\":
null } ], \"deep_nested_array\": [ {\"object_array1\": [
{\"key\": null }, {\"key\": null }, {\"key\": null } ]}
], \"string\": null}";
bool a = test::isEqual(input1, input2, temp);
if (a) {
cout << "True";
//std::cout << "Verify again" << std::endl;
} else {
cout << "check again";
}
}
//isJsonEqual(v[itr->name],v1[itr->name],v2[itr->name],a);
The problem lies here after finding the key is an array I want to use recursion to go deep into nested array and iterate in it(ie after I encounter its an array I want to recurse the entire array as a parsed json to loop inside and compare each keys.
Or can we create a new json for the arrays in the existing json and recurse the value to check it?please need some ideas with this.