Javascript 用于读取不规则json的Angular应用程序函数

Javascript 用于读取不规则json的Angular应用程序函数,javascript,json,angularjs,Javascript,Json,Angularjs,我有一个angularjs应用程序,它从json读取数据,json的结构类似于以下内容: [ { "name" : "TIER 1", "children" : [ { "children" : [ "ENGL-1301","HIST-1301"], }, { "children" : [ {"children" : [{ "course" : "SPCH 1311","term" : "Spring 20

我有一个angularjs应用程序,它从json读取数据,json的结构类似于以下内容:

[ { "name" : "TIER 1",
        "children" : [ 
            { "children" : [ "ENGL-1301","HIST-1301"],
            },
            { "children" : [ {"children" : [{ "course" : "SPCH 1311","term" : "Spring 2012"} ]}, "SPCH-1311","SPCH-1315","SPCH-1321"],
              "name" : "Speaking and Listening",

            },
            { "children" : [ "MATH-1314","MATH-1414","MATH-1316"],
              "name" : "Quantitative Reasoning", "subcategory2" : [  ]
            },
            { "children" : [ "ARTS-1311","ARTS-1312","ARTS-1313"],
              "name" : "Wellness and The Human Experience","subcategory2" : [  ]
            }
          ]
      },
      { "name" : "TIER 2",
        "children" : [ 
            { "children" : [ {"children" : [{ "course" : "ENGL 1302","term" : "Summer 2012"} ]}, "ENGL-1302" ],
              "name" : "Qualitative Reasoning, Literacy and Research",
            },
            { "children" : [ {"children" : [{ "course" : "GOVT 2301","term" : "Spring 2012"},
                                { "course" : "PSYC 2301","term" : "Summer 2012"} ]}, "HIST-1302","HIST-2301","HIST-2328"],
              "name2" : "Self and Society",
            },
            { "children" : [ "ARTS-1301","ARTS-1303","ARTS-1304","DANC-2303"],
              "name2" : "Humanity, Creativity and the Aesthetic Experience",
            },
          ]
      }
    ]
如您所见,json文件看起来组织得不好。它有几个元素有
子元素
,这些
子元素
有更多的元素称为
子元素
。因此,为了将这个json文件读入angular应用程序,我想定义一个名为
isemptychildren()
的函数来检查特定的子元素是否有更多的子类别


如果这个问题让人困惑,我很抱歉,但我不知道有什么更好的方法来解释它。如何编写此函数?

在所有浏览器中有效的一个健壮检查是在所有元素上递归使用
Object.keys()
函数,例如:

function isEmptyChildren(hash){
    return (Object.keys(hash).indexOf("chidren") == -1) ? true : false;
}

尽管出于您自身的理智考虑,我建议您在可能的情况下修改该数据结构,以使用不同的命名约定。

AngularJS提供了一个实用功能来简化属性存在性测试:

function isEmptyChildren(item){
    return angular.isUndefined(item.children);
}
您可以在AngularJS源代码中看到,它执行类型检查:


我希望我可以,但这就是我从服务器获取数据的方式:-(。我会试试你的方法