javascript - 在 javascript 上从真正嵌套的 json 数组中获取值

标签 javascript arrays json nested

如何从深度嵌套的 json 数组中获取值。
我需要从下面的 json 中获取所有对(nameValue 和 value)

  var json = [{
                name: 'Firstgroup',
                elements: [{
                    name: 'Field1',
                    elements: [{
                        name: 'country32',
                        elements: [{
                            nameValue: 'city1',
                            value: 2025
                        }]
                    }]
                },
                    {
                        name: 'Field2',
                        elements: [{
                            name: 'country22',
                            elements: [{
                                nameValue: 'city2',
                                value: 1875
                            }]
                        },
                            {
                                name: 'country12',
                                elements: [{
                                    nameValue: 'city3',
                                    value: 1810
                                }]
                            }]
                    }]
            },
                {
                    name: 'Secondgroup',
                    elements: [{
                        name: 'Field1',
                        elements: [{
                            name: 'country52',
                            elements: [{
                                nameValue: 'city4',
                                value: 1310
                            },
                                {
                                    nameValue: 'city5',
                                    value: 1125
                                }]
                        }]
                    },
                        {
                            name: 'Field3',
                            elements: [{
                                name: 'country42',
                                elements: [{
                                    nameValue: 'city6',
                                    value: 1100
                                }]
                            }]
                        }]
                }];

我设法通过下面的代码片段获得了第一对

 function getDataProvider(array)
    {
        var dataPoint = [];
        var elements = 'elements';
        var name = 'nameValue';
        var value = 'value';

        var i, j, len;

       for (j = 0; j < array.length; j++) {
           i = array[j];
           if (i[elements]) {
               this.getDataProvider(i[elements]);
            } else {
               dataPoint.push({
                   name: i[name],
                   value: i[value]
               });
            }
        }
       return dataPoint;
    }    

鉴于此 json 是动态的,其深度未知,但它将包含(名称值和值)对,我如何从上述 json 中获取所有对

最佳答案

您可以创建一个递归函数,当它有更多元素时调用自身,并在遇到结果时将值添加到其结果中。

var getNameAndValues = function(arr) {
  var nameValuePairs = [];
  for (var i = 0, len = arr.length; i < len; i++) {
    var item = arr[i];
    if (item.value && item.nameValue) {
      nameValuePairs.push(item);
    }
    if (item.elements) {
      nameValuePairs = nameValuePairs.concat(getNameAndValues(item.elements));
    }
  }
  return nameValuePairs;
};

var json = [{
                name: 'Firstgroup',
                elements: [{
                    name: 'Field1',
                    elements: [{
                        name: 'country32',
                        elements: [{
                            nameValue: 'city1',
                            value: 2025
                        }]
                    }]
                },
                    {
                        name: 'Field2',
                        elements: [{
                            name: 'country22',
                            elements: [{
                                nameValue: 'city2',
                                value: 1875
                            }]
                        },
                            {
                                name: 'country12',
                                elements: [{
                                    nameValue: 'city3',
                                    value: 1810
                                }]
                            }]
                    }]
            },
                {
                    name: 'Secondgroup',
                    elements: [{
                        name: 'Field1',
                        elements: [{
                            name: 'country52',
                            elements: [{
                                nameValue: 'city4',
                                value: 1310
                            },
                                {
                                    nameValue: 'city5',
                                    value: 1125
                                }]
                        }]
                    },
                        {
                            name: 'Field3',
                            elements: [{
                                name: 'country42',
                                elements: [{
                                    nameValue: 'city6',
                                    value: 1100
                                }]
                            }]
                        }]
                }];

var result = getNameAndValues(json);
var asString = "";
for (var i = 0, len = result.length; i < len; i++) {
  var item = result[i];
  asString += item.nameValue + ": " + item.value + "<br/>";
}
document.body.innerHTML = asString;

关于javascript - 在 javascript 上从真正嵌套的 json 数组中获取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45893696/

相关文章:

json - 删除 Ember 数据中 POST/PUT 操作的 JSON 根元素

javascript - 使用 JavaScript 的 CSS 窗口高度

javascript - 无法使用 'protractor-jasmine2-html-reporter' 更改 "filename: "中的文件名

javascript 如何在循环内向数组的坐标添加其他属性,而不删除数组的现有属性

javascript - 使用标签选择图库中的一组图片

c - 使用 struct 与 pthread 进行合并排序

将 char 数组复制到字符指针数组中

java - 如何在 Arraylist 中声明 String[]?

java - 在没有 Internet 连接时加载本地 JsonData

javascript - 我的 AJAX post 变量无法访问我的 PHP