我正在使用JSON和getJSON函数等,我正在尝试从JSON中获取数据,这些数据可以包含多个级别并且可以有多个子级。在那一刻,我可以通过使用另一个.each来看到我想要的值,例如:
$.each(data, function(i, value1) {
$.each(value1, function(i, value2) {
$.each(value2, function(i, value3) {
$.each(value3, function(i, value4) {
$.each(value4, function(i, value5) {
$.each(value5, function(i, value6) {
alert ("we got "+i);
});
唯一的问题是,我不会总是知道JSON中的内容,它可以拥有无限的孩子。那么我该怎样才能让它变得如此动态呢?
基本上我正在寻找的东西是继续检查孩子,直到它达到最低水平。
另外,我知道最后的值i是JSON中任何值的索引,
有没有办法自动化这个,以便我可以在JSON中检查说'name',它会返回'name'的值?
以下是我正在尝试使用的JSON示例:
[
{
"children": [
{
"children": [
{
"children": [
{
"children": [
{
"bucketPath": "AUDIO\\audio0.mp3",
"id": 305,
"modified": "2012-08-02T10:06:52",
"name": "audio0.mp3",
"state": "closed"
}
答案 0 :(得分:9)
使用递归:
function recurse(name, obj) {
if (!obj || typeof obj != "object")
alert("found leaf '"+name+"': "+obj);
else
$.each(obj, recurse);
}
recurse("root", data);
编辑:根据您的JSON,可以使其更具体:
function recurse(arr) {
for (var i=0; i<arr.length; i++)
for (var prop in arr[i])
if (prop == "children") // && arr[i].children instanceof Array
recurse(arr[i].children);
else
alert("we got "+prop+": "+arr[i][prop]);
}
recurse(data);
答案 1 :(得分:3)
答案 2 :(得分:0)
当JSON变得有点复杂时,我认为dojo的JSONQuery是一个很好的解决方案。如果您熟悉XPath,它就类似于XPath。查询可能会变得非常复杂,但这里是一个查询示例,用于在任何深度搜索具有给定名称的属性:
var results = dojox.json.query("..property_name", json_data);
这里有一篇很好的文章详细介绍了dojo的JSONQuery的使用:http://www.sitepen.com/blog/2008/07/16/jsonquery-data-querying-beyond-jsonpath/