在AngularJS中使用重复键迭代json响应
我一直在尝试从angular应用程序中的API调用获取响应json数据的一部分 我尝试了各种组合,但我只能获取最后一条记录,而不能同时获取两条记录 这是我的html在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": {
<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