通过递归合并JSON:

 function mergeJSON(o, n) {
let oType = Object.prototype.toString.call(o);
let nType = Object.prototype.toString.call(n);
if (nType == '[object Object]' && oType == '[object Object]') {
//合并属性(object)
for (let p in n) {
if (n.hasOwnProperty(p) && !o.hasOwnProperty(p)) {
o[p] = n[p];
} else if (n.hasOwnProperty(p) && (o.hasOwnProperty(p))) {
let oPType = Object.prototype.toString.call(o[p]);
let nPType = Object.prototype.toString.call(n[p]);
if ((nPType == '[object Object]' && oPType == '[object Object]') || (nPType == '[object Array]' && oPType == '[object Array]')) {
mergeJSON(o[p], n[p]);
} else {
o[p] = n[p];
}
}
}
} else if (nType == '[object Array]' && oType == '[object Array]') {
//合并属性(array)
for (let i in n) {
let oIType = Object.prototype.toString.call(o[i]);
let nIType = Object.prototype.toString.call(n[i]);
if ((nIType == '[object Object]' && oIType == '[object Object]') || (nIType == '[object Array]' && oIType == '[object Array]')) {
mergeJSON(o[i], n[i]);
} else {
o[i] = n[i];
}
}
} //合并属性(other)
o = n;
} //test let json1={
"a": "json1",
"b": 123,
"c": {
"dd": "json1 dd",
"ee": 556,
"f": "ff1"
},
"list": [
{
"a": 123,
"b": 96
},
{
"a": 45,
"b": 56
}
]
};
let json2={ "a": "json2",
"a2": 369,
"c": {
"dd2": "json2 dd",
"ee": "gg2"
},
"list": [
{
"a": "a1",
"b1": 69
},
369,
{
"i3": 36
}
]
}; mergeJSON(json1,json2); console.log(JSON.stringify(json1));

  

JavaScript通过递归合并JSON的更多相关文章

  1. JavaScript通过父节点ID递归生成JSON树

    JavaScript通过父节点ID递归生成JSON树: · 实现思路:通过递归实现(第一次递归的时候查询出所有的父节点,然后通过当前父节点id不断地去查询所有子节点,直到递归完毕返回)   · 代码示 ...

  2. JavaScript 递归遍历json串获取相关数据

    递归遍历json串获取相关数据   by:授客 QQ:1033553122 1.   测试数据 // 导航菜单 [ { id: 1, parentId: 0, parentName: null, na ...

  3. [转]javascript eval函数解析json数据时为什加上圆括号eval("("+data+")")

    javascript eval函数解析json数据时为什么 加上圆括号?为什么要 eval这里要添加 “("("+data+")");//”呢?   原因在于: ...

  4. JavaScript标准库之——JSON

    JSON 对象包含了两个方法,一是解析 JavaScript Object Notation (JSON),二是将值转换为 JSON.这个对象本身不能被调用或者作为构造函数,除了它的这两个方法属性外 ...

  5. Javascript中递归造成的堆栈溢出及解决方案

    关于堆栈的溢出问题,在Javascript日常开发中很常见,Google了下,相关问题还是比较多的.本文旨在描述如何解决此类问题. 首先看一个实例(当然你可以使用更容易的方式实现,这里我们仅探讨递归) ...

  6. JavaScript的Eval与JSON.parse的区别

    JavaScript的Eval与JSON.parse的区别 json的定义以及用法: JSON(JavaScript Object Notation)是一种轻量级的数据格式,采用完全独立于语言的文本格 ...

  7. JavaScript实现XML与JSON互转代码(转载)

    下面来分享一个关于JavaScript实现XML与JSON互转例子,这里面介绍了国外的三款xml转json的例子,希望这些例子能给你带来帮助. 最近在开发在线XML编辑器,打算使用JSON做为中间格式 ...

  8. 每天一个JavaScript实例-递归实现反转数组字符串

    <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...

  9. JavaScript(8)——JSON

    JSON 啊呀呀,终于写到了JSON了.莫名的开心,虽然还是被说进度慢,不过,我不管,我就是开心.恩,好好学习,好好加油.(这是一段毫无逻辑的话,我也不知道说啥了) JSON是JavaScript的一 ...

随机推荐

  1. react-native Execution failed for task ':app:prepareRnReduxReactNativeUpdateUnspecifiedLibrary'报错

    详细报错 Could not copy zip entry E:\项目目录\node_modules\react-native-update\android\build\outputs\aar\rea ...

  2. word2vec skip-gram系列2

    Word2Vec的CBOW模型和Skip-gram模型 故事先从NNLM模型说起,网络结构图如下图所示,接下来先具体阐述下这个网络, 输入是个one-hot representation的向量.比如你 ...

  3. Java中Double类型的精确计算

    import java.math.BigDecimal; public class DoubleUtil { private static final int DEF_DIV_SCALE = 5; / ...

  4. 【二分】Base Station Sites @ICPC2017HongKong/upcexam5559

    时间限制: 1 Sec 内存限制: 128 MB 5G is the proposed next telecommunications standards beyond the current 4G ...

  5. Ubuntu远程连接MySQL(connection refused)解决方法

    一.判断ubuntu是否开启防火墙 sudo ufw status 开放防火墙3306端口 sudo ufw allow 3306 二.查看3306端口是否打开  注意:红色框框表示3306绑定的ip ...

  6. lua的性能优化

    Roberto Ierusalimschy写过经典的Lua 性能提示的文章,链接地址>> 我通过实际的代码来验证,发现一个问题.当我使用 LuaStudio 运行时,发现结果反而与提示相反 ...

  7. Mybatis中使用集合、数组

    一.简述 本文讲Mybatis中如何将传入参数为数组或者集合对象,进行遍历,组合Where条件中如in条件等内容. 有3种情况: 如果传入的是单参数且参数类型是一个List的时候,collection ...

  8. 虚拟主机连接FTP发送"AUTH TLS"命令后提示“无法连接到服务器”

    https://help.aliyun.com/knowledge_detail/36417.html?spm=5176.11065259.1996646101.searchclickresult.7 ...

  9. 一些Android手机的平台信息

    1.OPPO A83 (2018-04-16) A83:/ $ cat /system/build.prop | grep "product"# ro.product.cpu.ab ...

  10. iOS CALayer 绘图模糊有锯齿的解决方案

    在CALayer中绘制图形会出现锯齿和模糊,同样绘图在UIView中就没有问题.经查资料发现不自动处理两倍像素的情况. 解决方案为:设置layer的contentsScale属性为[[UIScreen ...