无法迭代多个JSON值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无法迭代多个JSON值相关的知识,希望对你有一定的参考价值。

我正在尝试使用JSON值来查看ng-repeat中的数据。但我只获得第一个价值。我尝试使用其他方法但没有正确获取值。

我的JSON回复: -

{
  "stylesheet": {
    "attribute-set": [
      {
        "attribute": {
          "_name": "text-align",
          "__prefix": "xsl",
          "__text": "center"
        },
        "_name": "__frontmatter",
        "__prefix": "xsl"
      },
      {
        "attribute": [
          {
            "_name": "space-before",
            "__prefix": "xsl",
            "__text": "80mm"
          },
          {
            "_name": "space-before.conditionality",
            "__prefix": "xsl",
            "__text": "retain"
          },
          {
            "_name": "font-size",
            "__prefix": "xsl",
            "__text": "22pt"
          },
          {
            "_name": "font-weight",
            "__prefix": "xsl",
            "__text": "bold"
          },
          {
            "_name": "line-height",
            "__prefix": "xsl",
            "__text": "140%"
          }
        ],
        "_name": "__frontmatter__title",
        "_use-attribute-sets": "common.title",
        "__prefix": "xsl"
      }
    ],
    "_xmlns:xsl": "http://www.w3.org/1999/XSL/Transform",
    "_xmlns:fo": "http://www.w3.org/1999/XSL/Format",
    "_version": "2.0",
    "__prefix": "xsl"
  }
}

根据上一个问题的建议,我想从"__name"密钥中获得"attribute"的所有数据。

我按照我的控制器上的建议尝试了这个: -

console.log($scope.jsonObj);
                angular.forEach($scope.jsonObj,function(value,key){
                 console.log(value["attribute-set"][0]["attribute"]["_name"]);
                    });

jsonObj是我的JSON对象

在我的控制台中输出是text-align,这是第一个_name属性值。

如何从这个JSON中获得_name值的ng-repeat?

答案

数据结构相当糟糕,具有不同数据类型的相同对象键使事情变得有点困难。但是,这将返回所有_name字段的列表。

然后将其绑定到您的范围等。

data
    .stylesheet['attribute-set']
    .map(x => {
        if (Array.isArray(x.attribute))
            return x.attribute.map(y => y['_name']);
        else
            return [x.attribute['_name']]; 
    })
    .reduce((accu, cur) => accu.concat(...cur), []);

它基本上将_name字段提取到每个属性集的数组中,然后将其减少为单个数组。

在行动here看到它

另一答案

我假设你想要_name的所有值。如果您不这样做,请指定您想要的_name值。首先,您必须使用一个数组中的所有属性重构您的数据:

{
  "stylesheet": {
    "attribute_set": [
      {
        "_name": "text-align",
        "__prefix": "xsl",
        "__text": "center"
      },
      {
        "_name": "__frontmatter",
        "__prefix": "xsl"
      },
      {
        "_name": "space-before",
        "__prefix": "xsl",
        "__text": "80mm"
      },
      {
        "_name": "space-before.conditionality",
        "__prefix": "xsl",
        "__text": "retain"
      },
      {
        "_name": "font-size",
        "__prefix": "xsl",
        "__text": "22pt"
      },
      {
        "_name": "font-weight",
        "__prefix": "xsl",
        "__text": "bold"
      },
      {
        "_name": "line-height",
        "__prefix": "xsl",
        "__text": "140%"
      },
      {
        "_name": "__frontmatter__title",
        "_use-attribute-sets": "common.title",
        "__prefix": "xsl"
      }
    ],
    "_xmlns:xsl": "http://www.w3.org/1999/XSL/Transform",
    "_xmlns:fo": "http://www.w3.org/1999/XSL/Format",
    "_version": "2.0",
    "__prefix": "xsl"
  }
}

然后运行:

angular.forEach($scope.jsonObj.stylesheet.attribute_set, function(value, key) {
    console.log(value._name);
});

以上是关于无法迭代多个JSON值的主要内容,如果未能解决你的问题,请参考以下文章

如何在 laravel json 文件中传递多个值?

无法将文件中的多个值分配给 json 请求

从非迭代 JSON 对象中获取值

通过嵌套json递归迭代python中的特定键

我无法在片段中加载数据 json

从片段中的json获取值