在AngularJS中使用重复键迭代json响应

在AngularJS中使用重复键迭代json响应,angularjs,json,node.js,iteration,Angularjs,Json,Node.js,Iteration,我一直在尝试从angular应用程序中的API调用获取响应json数据的一部分 我尝试了各种组合,但我只能获取最后一条记录,而不能同时获取两条记录 这是我的html <div ng-controller="MyCtrl"> <li ng-repeat="x in textvalues"> {{ x.event.description }} </li> </div> API调用的响应如下所示: { "result": {

我一直在尝试从angular应用程序中的API调用获取响应json数据的一部分

我尝试了各种组合,但我只能获取最后一条记录,而不能同时获取两条记录

这是我的html

<div ng-controller="MyCtrl">
<li ng-repeat="x in textvalues">
       {{ x.event.description }}
</li>
</div>
API调用的响应如下所示:

{
  "result": {
    "count": "2",
    "event": {
      "date": "-293",
      "description": "When an invasion of",
      "lang": "en",
      "category1": "By place",
      "category2": "Persia",
      "granularity": "year"
    },
    "event": {
      "date": "-250",
      "description": "The Mauryan s",
      "lang": "en",
      "category1": "By place",
      "category2": "India",
      "granularity": "year"
    }
  }
}
我试图在UI上打印循环中的事件描述

这是我的小提琴-

我尝试了各种组合的响应数据,但无法得到这两种描述


请提供帮助。

您需要将$http作为参数传递给控制器,您可以看到控制器中的特定错误为“
”未定义$http

function MyCtrl($scope,$http) {

为了回答您的实际问题,您的服务返回一个对象而不是数组。它返回一个object的object。因此,在这种情况下不能使用ng repeat。它返回到

{“结果”:{“计数”:“3”,“事件”:{“日期”:“-250”,“描述”:“事件” Mauryan“阿育王的狮子之都”作为一根柱子的一部分竖立在 萨尔纳特,印度北方邦(大约日期)。现在是 保存于年的萨纳博物馆 Sarnath.,“lang”:“en”,“category1”:“By” 地点,“类别2”:“印度”,“粒度”:“年份”}}

为了访问事件,您可以使用

   {{textvalues.result.event.description}}

您需要将
$http
作为参数传递给控制器,您可以看到控制器中的特定错误为
“$http未定义”

function MyCtrl($scope,$http) {

为了回答您的实际问题,您的服务返回一个对象而不是数组。它返回一个object的object。因此,在这种情况下不能使用ng repeat。它返回到

{“结果”:{“计数”:“3”,“事件”:{“日期”:“-250”,“描述”:“事件” Mauryan“阿育王的狮子之都”作为一根柱子的一部分竖立在 萨尔纳特,印度北方邦(大约日期)。现在是 保存于年的萨纳博物馆 Sarnath.,“lang”:“en”,“category1”:“By” 地点,“类别2”:“印度”,“粒度”:“年份”}}

为了访问事件,您可以使用

   {{textvalues.result.event.description}}

您所指的
对象
结构永远不可能存在

{
  "result": {
    "count": "2",
    "event": {
      "date": "-293",
      "description": "When an invasion of",
      "lang": "en",
      "category1": "By place",
      "category2": "Persia",
      "granularity": "year"
    },
    "event": {
      "date": "-250",
      "description": "The Mauryan s",
      "lang": "en",
      "category1": "By place",
      "category2": "India",
      "granularity": "year"
    }
  }
}
如果在对象中重复任何
,它将覆盖JSON对象
键-值对
中的上一组
。API应该返回的内容如下所示,那么只有您才能获得所有事件对象

{
  "result": {
    "count": "3",
    "event": [{
      "date": "-250",
      "description": "The Mauryan ''Lion Capital of Asoka'', is erected as part of a pillar at Sarnath, Uttar Pradesh in India (approximate date). It is now preserved at the Sarnath Museum in Sarnath.",
      "lang": "en",
      "category1": "By place",
      "category2": "India",
      "granularity": "year"
    },
    {
      "date": "-250",
      "description": "The Mauryan ''Lion Capital of Asoka'', is erected as part of a pillar at Sarnath, Uttar Pradesh in India (approximate date). It is now preserved at the Sarnath Museum in Sarnath.",
      "lang": "en",
      "category1": "By place",
      "category2": "India",
      "granularity": "year"
    },
    {
      "date": "-250",
      "description": "The Mauryan ''Lion Capital of Asoka'', is erected as part of a pillar at Sarnath, Uttar Pradesh in India (approximate date). It is now preserved at the Sarnath Museum in Sarnath.",
      "lang": "en",
      "category1": "By place",
      "category2": "India",
      "granularity": "year"
    }]
  }
}

您所指的
对象
结构永远不可能存在

{
  "result": {
    "count": "2",
    "event": {
      "date": "-293",
      "description": "When an invasion of",
      "lang": "en",
      "category1": "By place",
      "category2": "Persia",
      "granularity": "year"
    },
    "event": {
      "date": "-250",
      "description": "The Mauryan s",
      "lang": "en",
      "category1": "By place",
      "category2": "India",
      "granularity": "year"
    }
  }
}
如果在对象中重复任何
,它将覆盖JSON对象
键-值对
中的上一组
。API应该返回的内容如下所示,那么只有您才能获得所有事件对象

{
  "result": {
    "count": "3",
    "event": [{
      "date": "-250",
      "description": "The Mauryan ''Lion Capital of Asoka'', is erected as part of a pillar at Sarnath, Uttar Pradesh in India (approximate date). It is now preserved at the Sarnath Museum in Sarnath.",
      "lang": "en",
      "category1": "By place",
      "category2": "India",
      "granularity": "year"
    },
    {
      "date": "-250",
      "description": "The Mauryan ''Lion Capital of Asoka'', is erected as part of a pillar at Sarnath, Uttar Pradesh in India (approximate date). It is now preserved at the Sarnath Museum in Sarnath.",
      "lang": "en",
      "category1": "By place",
      "category2": "India",
      "granularity": "year"
    },
    {
      "date": "-250",
      "description": "The Mauryan ''Lion Capital of Asoka'', is erected as part of a pillar at Sarnath, Uttar Pradesh in India (approximate date). It is now preserved at the Sarnath Museum in Sarnath.",
      "lang": "en",
      "category1": "By place",
      "category2": "India",
      "granularity": "year"
    }]
  }
}

我觉得这个API有点大错特错。一个JSON对象永远不能有两个相同的键,其中包含不同的值。如果选中“网络”选项卡,则会看到响应在对象中只有1个事件键,其值是对象返回的最后一个值。所以,虽然它可能会在stringized版本中显示2个事件,但它永远不会在JSON对象中为同一个键保存2个值

阅读

不要将format:json传递给API,而不要传递format的任何参数。它将以xml格式给出结果。然后通过一些库或下面所示的代码将此xml格式转换为json格式

var myApp = angular.module('myApp', []);

function MyCtrl($scope, $http) {

  $http.get('http://www.vizgr.org/historical-events/search.php?', {
    params: {
      /* format: 'json', */
      query: 'India',
      limit: '2'
    }
  }).then(function(response) {
    console.log(response.data);
    var dom = parseXml(response.data);
    var json = xml2json(dom)
    console.log(json)
    $scope.events = json.result.event;
  });

  function parseXml(xml) {
   var dom = null;
   if (window.DOMParser) {
      try { 
         dom = (new DOMParser()).parseFromString(xml, "text/xml"); 
      } 
      catch (e) { dom = null; }
   }
   else if (window.ActiveXObject) {
      try {
         dom = new ActiveXObject('Microsoft.XMLDOM');
         dom.async = false;
         if (!dom.loadXML(xml)) // parse error ..

            window.alert(dom.parseError.reason + dom.parseError.srcText);
      } 
      catch (e) { dom = null; }
   }
   else
      alert("cannot parse xml string!");
   return dom;
}

function xml2json(xml) {
  try {
    var obj = {};
    if (xml.children.length > 0) {
      for (var i = 0; i < xml.children.length; i++) {
        var item = xml.children.item(i);
        var nodeName = item.nodeName;

        if (typeof (obj[nodeName]) == "undefined") {
          obj[nodeName] = xml2json(item);
        } else {
          if (typeof (obj[nodeName].push) == "undefined") {
            var old = obj[nodeName];

            obj[nodeName] = [];
            obj[nodeName].push(old);
          }
          obj[nodeName].push(xml2json(item));
        }
      }
    } else {
      obj = xml.textContent;
    }
    return obj;
  } catch (e) {
      console.log(e.message);
  }
}
}
var myApp=angular.module('myApp',[]);
函数MyCtrl($scope$http){
$http.get('http://www.vizgr.org/historical-events/search.php?', {
参数:{
/*格式:“json”*/
问题:"印度",,
限制:“2”
}
}).然后(功能(响应){
console.log(response.data);
var dom=parseXml(response.data);
var json=xml2json(dom)
console.log(json)
$scope.events=json.result.event;
});
函数解析xml(xml){
var-dom=null;
if(window.DOMParser){
试试{
dom=(新的DOMParser()).parseFromString(xml,“text/xml”);
} 
catch(e){dom=null;}
}
else if(window.ActiveXObject){
试一试{
dom=新的ActiveXObject('Microsoft.XMLDOM');
dom.async=false;
如果(!dom.loadXML(xml))//解析错误。。
alert(dom.parseError.reason+dom.parseError.srcText);
} 
catch(e){dom=null;}
}
其他的
警报(“无法分析xml字符串!”);
返回dom;
}
函数xml2json(xml){
试一试{
var obj={};
如果(xml.children.length>0){
for(var i=0;i

检查这里的js。

我觉得这个API有点大错特错。一个JSON对象永远不能有两个相同的键,其中包含不同的值。如果选中“网络”选项卡,则会看到响应在对象中只有1个事件键,其值是对象返回的最后一个值。所以,虽然它可能会在stringized版本中显示2个事件,但它永远不会在JSON对象中为同一个键保存2个值

阅读

不要将format:json传递给API,而不要传递format的任何参数。它将以xml格式给出结果。然后通过一些库或下面所示的代码将此xml格式转换为json格式

var myApp = angular.module('myApp', []);

function MyCtrl($scope, $http) {

  $http.get('http://www.vizgr.org/historical-events/search.php?', {
    params: {
      /* format: 'json', */
      query: 'India',
      limit: '2'
    }
  }).then(function(response) {
    console.log(response.data);
    var dom = parseXml(response.data);
    var json = xml2json(dom)
    console.log(json)
    $scope.events = json.result.event;
  });

  function parseXml(xml) {
   var dom = null;
   if (window.DOMParser) {
      try { 
         dom = (new DOMParser()).parseFromString(xml, "text/xml"); 
      } 
      catch (e) { dom = null; }
   }
   else if (window.ActiveXObject) {
      try {
         dom = new ActiveXObject('Microsoft.XMLDOM');
         dom.async = false;
         if (!dom.loadXML(xml)) // parse error ..

            window.alert(dom.parseError.reason + dom.parseError.srcText);
      } 
      catch (e) { dom = null; }
   }
   else
      alert("cannot parse xml string!");
   return dom;
}

function xml2json(xml) {
  try {
    var obj = {};
    if (xml.children.length > 0) {
      for (var i = 0; i < xml.children.length; i++) {
        var item = xml.children.item(i);
        var nodeName = item.nodeName;

        if (typeof (obj[nodeName]) == "undefined") {
          obj[nodeName] = xml2json(item);
        } else {
          if (typeof (obj[nodeName].push) == "undefined") {
            var old = obj[nodeName];

            obj[nodeName] = [];
            obj[nodeName].push(old);
          }
          obj[nodeName].push(xml2json(item));
        }
      }
    } else {
      obj = xml.textContent;
    }
    return obj;
  } catch (e) {
      console.log(e.message);
  }
}
}
var myApp=angular.module('myApp',[]);
函数MyCtrl($scope$http){
$http.get('http://www.vizgr.or