JavaScript JSON 多级迭代解析

JavaScript JSON multilevel iterative parsing

本文关键字:迭代 多级 JSON JavaScript      更新时间:2023-09-26
{
   "id":0,
   "item":[
      {
         "id":"0-",
         "text":"BlueWing",
         "userdata":[
            {
               "name":"cid",
               "content":"10377"
            }
         ],
         "item":[
            {
               "id":"0-0",
               "text":"Auto",
               "userdata":[
                  {
                     "name":"cid",
                     "content":"10377,10376,10378,10387,10379,10384,10386,10380,10383,10385,10381,10388,10533"
                  }
               ],
               "item":[
                  {
                     "id":"0-0-0",
                     "text":"Auto",
                     "userdata":[
                        {
                           "name":"cid",
                           "content":"10377,10376,10378,10387,10379,10384,10386,10380,10383,10385,10381,10388"
                        }
                     ],
                     "item":[
                        {
                           "id":"0-0-0-0",
                           "text":"testaccount",
                           "userdata":[
                              {
                                 "name":"cid",
                                 "content":"10377,10376,10378,10387,10379,10384,10386,10380,10383,10385,10381,10388"
                              }
                           ],
                           "item":[
                              {
                                 "id":"0-0-0-0-0",
                                 "text":"Add New List",
                                 "userdata":[
                                    {
                                       "name":"clid",
                                       "content":99999
                                    },
                                    {
                                       "name":"cid",
                                       "content":"10377,10376,10378,10387,10379,10384,10386,10380,10383,10385,10381,10388"
                                    }
                                 ]
                              },
                              {
                                 "id":"0-0-0-0-1",
                                 "text":"testaccount",
                                 "userdata":[
                                    {
                                       "name":"cid",
                                       "content":"10377,10376,10378,10387,10379,10384,10386,10380,10383,10385,10381,10388"
                                    }
                                 ],
                                 "item":[
                                    {
                                       "id":"0-0-0-0-1-0",
                                       "text":"Add New List",
                                       "userdata":[
                                          {
                                             "name":"clid",
                                             "content":99999
                                          },
                                          {
                                             "name":"cid",
                                             "content":"10377,10376,10378,10387,10379,10384,10386,10380,10383,10385,10381,10388"
                                          }
                                       ]
                                    },
                                    {
                                       "id":"0-0-0-0-1-1",
                                       "text":"testaccount - 10377,10376,10378,10387,10379,10384,10386,10380,10383,10385,10381,10388",
                                       "userdata":[
                                          {
                                             "name":"cid",
                                             "content":"10377,10376,10378,10387,10379,10384,10386,10380,10383,10385,10381,10388"
                                          }
                                       ],
                                       "item":[
                                          {
                                             "id":"0-0-0-0-1-1-0",
                                             "text":"Add New List",
                                             "userdata":[
                                                {
                                                   "name":"clid",
                                                   "content":99999
                                                },
                                                {
                                                   "name":"cid",
                                                   "content":"10377,10376,10378,10387,10379,10384,10386,10380,10383,10385,10381,10388"
                                                }
                                             ]
                                          }
                                       ]
                                    }
                                 ]
                              }
                           ]
                        }
                     ]
                  },
                  {
                     "id":"0-0-1",
                     "text":"Balise Toyota",
                     "userdata":[
                        {
                           "name":"cid",
                           "content":"10533"
                        }
                     ],
                     "item":[
                        {
                           "id":"0-0-1-0",
                           "text":"Balise Toyota",
                           "userdata":[
                              {
                                 "name":"cid",
                                 "content":"10533"
                              }
                           ],
                           "item":[
                              {
                                 "id":"0-0-1-0-0",
                                 "text":"Add New List",
                                 "userdata":[
                                    {
                                       "name":"clid",
                                       "content":99999
                                    },
                                    {
                                       "name":"cid",
                                       "content":"10533"
                                    }
                                 ]
                              },
                              {
                                 "id":"0-0-1-0-1",
                                 "text":"Balise Toyota",
                                 "userdata":[
                                    {
                                       "name":"cid",
                                       "content":"10533"
                                    }
                                 ],
                                 "item":[
                                    {
                                       "id":"0-0-1-0-1-0",
                                       "text":"Add New List",
                                       "userdata":[
                                          {
                                             "name":"clid",
                                             "content":99999
                                          },
                                          {
                                             "name":"cid",
                                             "content":"10533"
                                          }
                                       ]
                                    },
                                    {
                                       "id":"0-0-1-0-1-1",
                                       "text":"Balise Toyota - 10533",
                                       "userdata":[
                                          {
                                             "name":"cid",
                                             "content":"10533"
                                          }
                                       ],
                                       "item":[
                                          {
                                             "id":"0-0-1-0-1-1-0",
                                             "text":"Add New List",
                                             "userdata":[
                                                {
                                                   "name":"clid",
                                                   "content":99999
                                                },
                                                {
                                                   "name":"cid",
                                                   "content":"10533"
                                                }
                                             ]
                                          },
                                          {
                                             "id":"0-0-1-0-1-1-1",
                                             "text":"Balise.List - 11949",
                                             "userdata":[
                                                {
                                                   "name":"clid",
                                                   "content":11949
                                                },
                                                {
                                                   "name":"cid",
                                                   "content":"10533"
                                                }
                                             ]
                                          }
                                       ]
                                    }
                                 ]
                              }
                           ]
                        }
                     ]
                  }
               ]
            },
            {
               "id":"0-1",
               "text":"BlueWing",
               "userdata":[
                  {
                     "name":"cid",
                     "content":"10667,10668"
                  }
               ],
               "item":[
                  {
                     "id":"0-1-0",
                     "text":"HVAC",
                     "userdata":[
                        {
                           "name":"cid",
                           "content":"10667,10668,10348,10294,10297,10313,10521,10351,10309,10296,10316,10315,10312,10301,10347,10300,10306,10308,10307,10298,10305,10371,10291,10349,10311,10354,10345,10310,10292,10372,10295,10304,10303,10299,10314,10290,10490,10293,10302"
                        }
                     ],
                     "item":[
                        {
                           "id":"0-1-0-0",
                           "text":"HVAC",
                           "userdata":[
                              {
                                 "name":"cid",
                                 "content":"10667,10668"
                              }
                           ],
                           "item":[
                              {
                                 "id":"0-1-0-0-0",
                                 "text":"Add New List",
                                 "userdata":[
                                    {
                                       "name":"clid",
                                       "content":99999
                                    },
                                    {
                                       "name":"cid",
                                       "content":"10667,10668"
                                    }
                                 ]
                              },
                              {
                                 "id":"0-1-0-0-1",
                                 "text":"Mann Plumbing & Heating",
                                 "userdata":[
                                    {
                                       "name":"cid",
                                       "content":"10667"
                                    }
                                 ],
                                 "item":[
                                    {
                                       "id":"0-1-0-0-1-0",
                                       "text":"Add New List",
                                       "userdata":[
                                          {
                                             "name":"clid",
                                             "content":99999
                                          },
                                          {
                                             "name":"cid",
                                             "content":"10667"
                                          }
                                       ]
                                    },
                                    {
                                       "id":"0-1-0-0-1-1",
                                       "text":"Mann Plumbing & Heating - 10667",
                                       "userdata":[
                                          {
                                             "name":"cid",
                                             "content":"10667"
                                          }
                                       ],
                                       "item":[
                                          {
                                             "id":"0-1-0-0-1-1-0",
                                             "text":"Add New List",
                                             "userdata":[
                                                {
                                                   "name":"clid",
                                                   "content":99999
                                                },
                                                {
                                                   "name":"cid",
                                                   "content":"10667"
                                                }
                                             ]
                                          },
                                          {
                                             "id":"0-1-0-0-1-1-1",
                                             "text":"Radius List - 12960",
                                             "userdata":[
                                                {
                                                   "name":"clid",
                                                   "content":12960
                                                },
                                                {
                                                   "name":"cid",
                                                   "content":"10667"
                                                }
                                             ]
                                          }
                                       ]
                                    }
                                 ]
                              },
                              {
                                 "id":"0-1-0-0-2",
                                 "text":"RES Air Conditioning",
                                 "userdata":[
                                    {
                                       "name":"cid",
                                       "content":"10668"
                                    }
                                 ],
                                 "item":[
                                    {
                                       "id":"0-1-0-0-2-0",
                                       "text":"Add New List",
                                       "userdata":[
                                          {
                                             "name":"clid",
                                             "content":99999
                                          },
                                          {
                                             "name":"cid",
                                             "content":"10668"
                                          }
                                       ]
                                    },
                                    {
                                       "id":"0-1-0-0-2-1",
                                       "text":"RES Air Conditioning - 10668",
                                       "userdata":[
                                          {
                                             "name":"cid",
                                             "content":"10668"
                                          }
                                       ],
                                       "item":[
                                          {
                                             "id":"0-1-0-0-2-1-0",
                                             "text":"Add New List",
                                             "userdata":[
                                                {
                                                   "name":"clid",
                                                   "content":99999
                                                },
                                                {
                                                   "name":"cid",
                                                   "content":"10668"
                                                }
                                             ]
                                          }
                                       ]
                                    }
                                 ]
                              }
                           ]
                        }
                     ]
                  }
               ]
            }
         ]
      }
   ]
}

我需要遍历所有级别并按"id"匹配并获取"内容"的值。

var id = "0-1-0-0-0";

如果 JSON id与 id 匹配,则返回 content 的值。应该返回10667,10668

提前感谢!

基本上,您可以遍历对象中的所有元素,如果找到所需的id,则停止迭代。

这个问题的问题是第一级的半级,id1(0级(,1-(1级(和1-0(2级(以及下一个级别都用破折号隔开。

此建议使用 String#indexOf 并检查路径,所需索引为 0,并迭代该检查是否为真。如果找到完整路径,则返回对象。如果未找到,则继续迭代和递归。

function getObject(object, path) {
    function getPart(o) {
        if (!path.indexOf(o.id)) {
            if (path === o.id) {
                result = o;
                return true;
            }
            return Array.isArray(o.item) && o.item.some(getPart);
        }
        return false;
    }
    var parts = path.split('-'),
        result;
    getPart(object);
    return result;
}
var object = { "id": 0, "item": [{ "id": "0-", "text": "BlueWing", "userdata": [{ "name": "cid", "content": "10377" }], "item": [{ "id": "0-0", "text": "Auto", "userdata": [{ "name": "cid", "content": "10377,10376,10378,10387,10379,10384,10386,10380,10383,10385,10381,10388,10533" }], "item": [{ "id": "0-0-0", "text": "Auto", "userdata": [{ "name": "cid", "content": "10377,10376,10378,10387,10379,10384,10386,10380,10383,10385,10381,10388" }], "item": [{ "id": "0-0-0-0", "text": "testaccount", "userdata": [{ "name": "cid", "content": "10377,10376,10378,10387,10379,10384,10386,10380,10383,10385,10381,10388" }], "item": [{ "id": "0-0-0-0-0", "text": "Add New List", "userdata": [{ "name": "clid", "content": 99999 }, { "name": "cid", "content": "10377,10376,10378,10387,10379,10384,10386,10380,10383,10385,10381,10388" }] }, { "id": "0-0-0-0-1", "text": "testaccount", "userdata": [{ "name": "cid", "content": "10377,10376,10378,10387,10379,10384,10386,10380,10383,10385,10381,10388" }], "item": [{ "id": "0-0-0-0-1-0", "text": "Add New List", "userdata": [{ "name": "clid", "content": 99999 }, { "name": "cid", "content": "10377,10376,10378,10387,10379,10384,10386,10380,10383,10385,10381,10388" }] }, { "id": "0-0-0-0-1-1", "text": "testaccount - 10377,10376,10378,10387,10379,10384,10386,10380,10383,10385,10381,10388", "userdata": [{ "name": "cid", "content": "10377,10376,10378,10387,10379,10384,10386,10380,10383,10385,10381,10388" }], "item": [{ "id": "0-0-0-0-1-1-0", "text": "Add New List", "userdata": [{ "name": "clid", "content": 99999 }, { "name": "cid", "content": "10377,10376,10378,10387,10379,10384,10386,10380,10383,10385,10381,10388" }] }] }] }] }] }, { "id": "0-0-1", "text": "Balise Toyota", "userdata": [{ "name": "cid", "content": "10533" }], "item": [{ "id": "0-0-1-0", "text": "Balise Toyota", "userdata": [{ "name": "cid", "content": "10533" }], "item": [{ "id": "0-0-1-0-0", "text": "Add New List", "userdata": [{ "name": "clid", "content": 99999 }, { "name": "cid", "content": "10533" }] }, { "id": "0-0-1-0-1", "text": "Balise Toyota", "userdata": [{ "name": "cid", "content": "10533" }], "item": [{ "id": "0-0-1-0-1-0", "text": "Add New List", "userdata": [{ "name": "clid", "content": 99999 }, { "name": "cid", "content": "10533" }] }, { "id": "0-0-1-0-1-1", "text": "Balise Toyota - 10533", "userdata": [{ "name": "cid", "content": "10533" }], "item": [{ "id": "0-0-1-0-1-1-0", "text": "Add New List", "userdata": [{ "name": "clid", "content": 99999 }, { "name": "cid", "content": "10533" }] }, { "id": "0-0-1-0-1-1-1", "text": "Balise.List - 11949", "userdata": [{ "name": "clid", "content": 11949 }, { "name": "cid", "content": "10533" }] }] }] }] }] }] }, { "id": "0-1", "text": "BlueWing", "userdata": [{ "name": "cid", "content": "10667,10668" }], "item": [{ "id": "0-1-0", "text": "HVAC", "userdata": [{ "name": "cid", "content": "10667,10668,10348,10294,10297,10313,10521,10351,10309,10296,10316,10315,10312,10301,10347,10300,10306,10308,10307,10298,10305,10371,10291,10349,10311,10354,10345,10310,10292,10372,10295,10304,10303,10299,10314,10290,10490,10293,10302" }], "item": [{ "id": "0-1-0-0", "text": "HVAC", "userdata": [{ "name": "cid", "content": "10667,10668" }], "item": [{ "id": "0-1-0-0-0", "text": "Add New List", "userdata": [{ "name": "clid", "content": 99999 }, { "name": "cid", "content": "10667,10668" }] }, { "id": "0-1-0-0-1", "text": "Mann Plumbing & Heating", "userdata": [{ "name": "cid", "content": "10667" }], "item": [{ "id": "0-1-0-0-1-0", "text": "Add New List", "userdata": [{ "name": "clid", "content": 99999 }, { "name": "cid", "content": "10667" }] }, { "id": "0-1-0-0-1-1", "text": "Mann Plumbing & Heating - 10667", "userdata": [{ "name": "cid", "content": "10667" }], "item": [{ "id": "0-1-0-0-1-1-0", "text": "Add New List", "userdata": [{ "name": "clid", "content": 99999 }, { "name": "cid", "content": "10667" }] }, { "id": "0-1-0-0-1-1-1", "text": "Radius List - 12960", "userdata": [{ "name": "clid", "content": 12960 }, { "name": "cid", "content": "10667" }] }] }] }, { "id": "0-1-0-0-2", "text": "RES Air Conditioning", "userdata": [{ "name": "cid", "content": "10668" }], "item": [{ "id": "0-1-0-0-2-0", "text": "Add New List", "userdata": [{ "name": "clid", "content": 99999 }, { "name": "cid", "content": "10668" }] }, { "id": "0-1-0-0-2-1", "text": "RES Air Conditioning - 10668", "userdata": [{ "name": "cid", "content": "10668" }], "item": [{ "id": "0-1-0-0-2-1-0", "text": "Add New List", "userdata": [{ "name": "clid", "content": 99999 }, { "name": "cid", "content": "10668" }] }] }] }] }] }] }] }] },
    id = "0-1-0-0-0",
    part = getObject(object, id);
document.write('<pre>' + JSON.stringify(part, 0, 4) + '</pre>');