Расширенная версия, которая также объединяет объекты с одинаковыми именами и добавляет элементы массива (если они присутствуют с одинаковыми именами в обоих объектах):
void mergeJson(QJsonObject& src, const QJsonObject& other)
{
for(auto it = other.constBegin(); it != other.constEnd(); ++it)
{
if(src.contains(it.key()))
{
if(src.value(it.key()).isObject() && other.value(it.key()).isObject())
{
QJsonObject one(src.value(it.key()).toObject());
QJsonObject two(other.value(it.key()).toObject());
mergeJson(one, two);
src[it.key()] = one;
}
else if(src.value(it.key()).isArray() && other.value(it.key()).isArray())
{
QJsonArray arr = other.value(it.key()).toArray();
QJsonArray srcArr = src.value(it.key()).toArray();
for(int i = 0; i < arr.size(); i++)
srcArr.append(arr[i]);
src[it.key()] = srcArr;
}
}
else
src[it.key()] = it.value();
}
}
Если src
и other
имеют поле с одинаковым именем (кроме массивов и объектов, см. выше), будет использоваться src.
источник:
{
"arr":[
{
"fieldOne":"dqwd",
"fieldTwo":"dqwd2"
},
{
"fieldOne":"dqwd",
"fieldTwo":"dqwd2"
},
{
"fieldOne":"dqwd",
"fieldTwo":"dqwd2"
}
],
"fieldOne":"dqwd",
"fieldTwo":"dqwd2",
"two":{
"fieldOne":"dwqwfw",
"fieldTwo":"grew",
"fregtegergwedffe":{
"sdqqwd":"wdqfrg"
}
}
}
другое:
{
"arr":[
{
"fieldOne":"dwqwfw",
"fieldTwo":"kjhgf",
"qwdqwd":"grew"
}
],
"fieldOne":"rfgwef",
"grege":"gfewrfew",
"grwefege":"fewfgrew",
"two":{
"fieldOne":"dwqwfw",
"fieldTwo":"kjhgf",
"qwdqwd":"grew"
}
}
объединено/src после звонка:
{
"arr":[
{
"fieldOne":"dqwd",
"fieldTwo":"dqwd2"
},
{
"fieldOne":"dqwd",
"fieldTwo":"dqwd2"
},
{
"fieldOne":"dqwd",
"fieldTwo":"dqwd2"
},
{
"fieldOne":"dwqwfw",
"fieldTwo":"kjhgf",
"qwdqwd":"grew"
}
],
"fieldOne":"dqwd",
"fieldTwo":"dqwd2",
"grege":"gfewrfew",
"grwefege":"fewfgrew",
"two":{
"fieldOne":"dwqwfw",
"fieldTwo":"grew",
"fregtegergwedffe":{
"sdqqwd":"wdqfrg"
},
"qwdqwd":"grew"
}
}
15.03.2021
insert
, поэтому я использовалmap.unite(json2.toVariantMap())
. 05.11.2020insert
был представлен в Qt 5.15. С другой стороны,unite
устарело. В любом случае, я рад помочь. 05.11.2020