json文件中的无限嵌套元素 - 如何获取特定元素?
问题描述:
这是我的JSON文件:json文件中的无限嵌套元素 - 如何获取特定元素?
{
"categories": {
"category": [
{
"id": "1",
"title": "Android",
"subcategory": [
{
"id": "1",
"title": "JavaScript",
"question": [
我的问题是:如果子类元素可以出现无限次数 嵌套本身我怎样才能显示在我的JSON文件中的每个子类中的所有元素在javascript的帮助下,我如何在嵌套中获得北斗? 如果我写我的代码:
data.categories.category[i].subcategory[0].subcategory[0].subcategory[0].title
这意味着,我需要补充的时候subcategory[0]
无限多去各个 title属性 - 创造了很多不同的函数来处理每一个不同的情况 - 这是我的问题。
答
只是重复他们:
function getAllTitles(node) {
var cats = data.categories.category,
titles = [];
for (var i=0; i<cats.length; i++) {
var cat = cats[i];
while (cat.subcategory && cat.subcategory[0])
cat = cat.subcategory[0]; // travel deeper
// now cat is a subcategory that has no subcategories any more
titles.push(cat.title);
}
return titles;
}
答
使用递归函数。例如:
function getLeafCategory(node) {
if (node.subcategory && node.subcategory[0]) {
return getLeafCategory(node.subcategory[0]);
}
return node;
}
很明显,如果您的JSON真的无限大,那么这将不起作用!但在这种情况下,您将无法首先加载它!
你会调用它是这样的:
var myTitle = getLeafCategory(data.categories.category[i]).title;
什么功能需要做的是它会检查你的过去,看看它是否有一个子类别,如果该子类别有一个零的条目。如果是这样,它会再次将该新节点传递给该函数。如果不是,那么你已经达到了链条的末端,并返回结果。
有关递归的一些注意事项:如果您的链条很长,最终可能会得到一个Stack Overflow
。应该可以将递归函数重写为while
循环,但代码是(恕我直言)不那么优雅。
function getLeafCategoryWithoutRecursion(node) {
while(node.subcategory && node.subcategory[0]) {
node = node.subcategory[0]
}
return node;
}
还要注意这两个功能是假设你没有(其中一个子类别实际指向回父母),这将导致这两个功能在一个无限循环挂任何环路(虽然递归的最终会抛出Stack Overflow
)。
你说的无限是什么意思?未指定的次数? –
使用[递归](http://en.wikipedia.org/wiki/Recursion_(computer_science)#Recursive_procedures) – Quentin
@ Quentin的评论后续操作:use [recursion](http://stackoverflow.com/questions/16588418/infinite -json-file-how-to-get-specific-element#comment23840284_16588418) – Doorknob