Lua中实现两个JSON数据合并
Lua中实现两个JSON数据合并
在Lua中,有时需要合并两个JSON格式的table数据,将两个表合成一个表。
Code
--[[
@author:
@date:
@note: 对比两个json的内容,并将jsonNew的值覆盖到jsonOld的值里面
@param: jsonNew 修改后的json对象,table
@param: jsonOld 修改前的json对象,table
@param: isAddNull 是否把new当中有,但是old没有的值合并,true代表合并,false代表不合并,默认是true
@return: jsonFinaly,modifyKeys jsonFinaly是两个合并后的值,modifyKeys是修改的键值对的键列表
--]]
function mergeJsonObj(jsonNew,jsonOld,isAddNull)
if(nil == isAddNull)then
isAddNull = true;
end
local modifyKeys = {};
if(nil == jsonOld and isAddNull)then
return jsonNew,{};
elseif nil == jsonOld then
return nil,{};
elseif nil == jsonNew then
return jsonOld,{};
end
for k,v in pairs(jsonNew)
do
if("table" == type(v) and nil ~= jsonOld[k] and v ~= jsonOld[k])then
local tableGet,modifyKeysGet = mergeJsonObj(v, jsonOld[k], isAddNull);
for kg,vg in pairs(modifyKeysGet)
do
table.insert(modifyKeys, tostring(k) .. "/" .. tostring(vg));
end
table.insert(modifyKeys, k);
elseif(nil == jsonOld[k] and isAddNull)then
table.insert(modifyKeys,k);
elseif(nil ~= jsonOld[k] and v ~= jsonOld[k])then
table.insert(modifyKeys,k);
end
if(k == modifyKeys[#modifyKeys])then
jsonOld[k] = v;
end
end
return jsonOld,modifyKeys;
end