在嵌套的json中查找/删除/添加/更新对象 [英] Find / delete / add / update objects in nested json

查看:76
本文介绍了在嵌套的json中查找/删除/添加/更新对象的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在嵌套的json中找到对象有问题!我需要在嵌套的json中执行添加对象和删除对象等操作。通过使用JSON.stringify获取对象是否容易,并在该字符串中查找对象ID参数(每个对象都有自己的唯一ID)。然后从那一点找到它的包装花括号({})我可以得到它自己的对象,然后删除它或在其中添加新对象。

I have a problem with finding object in nested json! I need to do operations like 'add' to object and 'delete' object in that nested json. Would it be easy to get object by using "JSON.stringify" and in that string find objects ID parameter (every object has its own unique ID). Then from that point find its "wrapper" curly braces ({}) i could get object it self and then delete it or add new object in it.

我有这个想法,但不知道如何选择它的花括号...我认为它可能有用,但你有什么用? :)

I had this idea, but have no idea how to select its curly braces... I think it might work, but what do you thing? :)

这是示例对象! https://jsfiddle.net/gb8hb8g7/

var aa = [
    {name: "aaa",
     id: 1,
     items: [
         {name: "bbb",
          id: 15,
          items: [
              {name: "ccc",
               id: 44},
              {name: "ddd",
               id: 91}
          ]},
         {name: "eee",
          id: 12}
     ]
    }
];

console.log(JSON.stringify(aa));


推荐答案

您可以递归遍历嵌套的JSON,以执行你需要的操作。

You can traverse the nested JSON recursively, to perform the operations you need.

var aa = [
    {name: "aaa",
     id: 1,
     items: [
         {name: "bbb",
          id: 15,
          items: [
              {name: "ccc",
               id: 44},
              {name: "ddd",
               id: 91}
          ]},
         {name: "eee",
          id: 12}
     ]
    }
];


var fff = {name: "fff", id: 13};
addObj(aa, 91, fff);                       // Add obj to same array as item 91
chgObj(aa, 91, '^', 'name', 'zzz');        // Change 'name' property of item 91
chgObj(aa, 91, '+', 'other', 'test');      // Add property to item 91 
chgObj(aa, 91, '+', 'gone', 'delete me');  // Add property to item 91
chgObj(aa, 91, '-', 'gone');               // Delete property from item 91
dltObj(aa, 44);                            // Delete item 44

function addObj(itemArr, nId, newObj) {
    for (var i = 0; i < itemArr.length; i++) {
        if (itemArr[i].id && itemArr[i].id === nId) {
            itemArr.push(newObj);
        } else {
            if (itemArr[i].items) {
                addObj(itemArr[i].items, nId, newObj);
            }
        }
    }
}

function chgObj(itemArr, nId, operator, prop, val) {
    for (var i = 0; i < itemArr.length; i++) {
        if (itemArr[i].id && itemArr[i].id === nId) {
            switch (operator) {
                case '+':
                    if (!itemArr[i][prop]) {
                        itemArr[i][prop] = val;
                    }
                    break;

                case '-':
                    if (itemArr[i][prop]) {
                        delete itemArr[i][prop];
                    }
                    break;

                case '^':
                    if (itemArr[i][prop]) {
                        itemArr[i][prop] = val;
                    }
                    break;
            }
        } else {
            if (itemArr[i].items) {
                chgObj(itemArr[i].items, nId, operator, prop, val);
            }
        }
    }
}

function dltObj(itemArr, nId) {
    for (var i = 0; i < itemArr.length; i++) {
        if (itemArr[i].id && itemArr[i].id === nId) {
            itemArr.splice(i, 1);
        } else {
            if (itemArr[i].items) {
                dltObj(itemArr[i].items, nId);
            }
        }
    }
}

alert(JSON.stringify(aa));

新小提琴: https://jsfiddle.net/ta4pjqew/2

这篇关于在嵌套的json中查找/删除/添加/更新对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆