Javascript 使用不同的嵌套json重复
因此,我有一个API,它返回一个活动列表,但我必须一次获取两个项目的信息,因此,如果我在第一次调用中有3个项目,那么返回的json将如下所示:Javascript 使用不同的嵌套json重复,javascript,html,json,angularjs,Javascript,Html,Json,Angularjs,因此,我有一个API,它返回一个活动列表,但我必须一次获取两个项目的信息,因此,如果我在第一次调用中有3个项目,那么返回的json将如下所示: cesta{ fecha="14/08/2015 2:42:28 PM", tipo="9", pagina="1", total="3", inst [{ nu_doc_opened="N", nu_doc="14", nu_inst="1", nb_wf{ cdata_sec
cesta{
fecha="14/08/2015 2:42:28 PM",
tipo="9",
pagina="1",
total="3",
inst [{
nu_doc_opened="N",
nu_doc="14",
nu_inst="1",
nb_wf{
cdata_section="Gestión calendario específico"
}
},
nu_doc_opened="N",
nu_doc="15",
nu_inst="2",
nb_wf{
cdata_section="Gestión calendario general"
}
}]
}
在下一次调用中,返回的json如下
cesta{
fecha="14/08/2015 2:42:29 PM",
tipo="9",
pagina="2",
total="3",
inst {
nu_doc_opened="N",
nu_doc="16",
nu_inst="1",
nb_wf{
cdata_section="Gestión calendario específico"
}
}
}
我想通过这个json获取一些数据并将其放在一个表中,所以我尝试像这样使用ng repeat:注意,我只想获取一些值,而不是全部值
$scope.basket= data.cesta.inst;
<tbody>
<tr ng-repeat="b in basket">
<td>{{b.nu_doc}}</td>
<td>{{b.nu_inst}}</td>
<td>{{b.nb_wf.cdata_section}}</td>
</tr>
</tbody>
问题是,当json在'inst'中有2个或更多的对象时(如第一个示例中所示),这是可行的,因为它是一个数组,但当它只有1个对象时,它将不起作用,我该怎么做才能使ng在这两种情况下重复工作?
感谢高级这是因为在第二种情况下,当迭代对象时,它会得到一个对象,它会得到属性和值,而不是像第一个数组中那样的对象 将该对象包装在数组中,然后它就可以工作了
$scope.basket=angular.isArraydata.cesta.inst?data.cesta.inst:[data.cesta.inst] 这是因为在第二种情况下,它在迭代对象时得到一个对象,它得到的属性和值与第一个数组中的对象不同 将该对象包装在数组中,然后它就可以工作了 $scope.basket=angular.isArraydata.cesta.inst?data.cesta.inst:[data.cesta.inst] 正如您所意识到的,ng repeat需要一个数组。如果即使只有一个数据对象,也无法强制端点始终返回数组,那么您可能需要编写一个黑客解决方案 有一个不切实际的想法: $scope.basket=data.cest.inst.length!==未定义?data.cest.inst:[data.cest.inst] 我认为您已经了解了这一点,但万一没有,下面是$scope.basket需要成为数组的原因: 简而言之:ng repeat需要一个数组。在第一种情况下,$scope.basket是一个对象数组,但在第二种情况下,它只是一个对象。在第二种情况下,需要将对象放在数组中,即[nu_doc:…}],以便格式一致。注意:只有一个对象的数组是可以的 例如,在第一种情况下,您会得到:
$scope.basket = [{nu_doc: ...}, {nu_doc: ...}]
$scope.basket = {nu_doc: ...}
这与您编写的ng repeat语句配合得很好
但在第二种情况下,你会得到:
$scope.basket = [{nu_doc: ...}, {nu_doc: ...}]
$scope.basket = {nu_doc: ...}
所以ng repeat将循环遍历该对象上的属性,即nu_doc,nu_inst。。。而不是将其视为具有单个对象的数组,这正是您所需要的
因此,JSON的第二部分需要是:
cesta{
fecha="14/08/2015 2:42:29 PM",
tipo="9",
pagina="2",
total="3",
inst [{
nu_doc_opened="N",
nu_doc="16",
nu_inst="1",
nb_wf{
cdata_section="Gestión calendario específico"
}
}
}]
正如您所意识到的,ng repeat需要一个数组。如果即使只有一个数据对象,也无法强制端点始终返回数组,那么您可能需要编写一个黑客解决方案
有一个不切实际的想法:
$scope.basket=data.cest.inst.length!==未定义?data.cest.inst:[data.cest.inst]
我认为您已经了解了这一点,但万一没有,下面是$scope.basket需要成为数组的原因:
简而言之:ng repeat需要一个数组。在第一种情况下,$scope.basket是一个对象数组,但在第二种情况下,它只是一个对象。在第二种情况下,需要将对象放在数组中,即[nu_doc:…}],以便格式一致。注意:只有一个对象的数组是可以的
例如,在第一种情况下,您会得到:
$scope.basket = [{nu_doc: ...}, {nu_doc: ...}]
$scope.basket = {nu_doc: ...}
这与您编写的ng repeat语句配合得很好
但在第二种情况下,你会得到:
$scope.basket = [{nu_doc: ...}, {nu_doc: ...}]
$scope.basket = {nu_doc: ...}
所以ng repeat将循环遍历该对象上的属性,即nu_doc,nu_inst。。。而不是将其视为具有单个对象的数组,这正是您所需要的
因此,JSON的第二部分需要是:
cesta{
fecha="14/08/2015 2:42:29 PM",
tipo="9",
pagina="2",
total="3",
inst [{
nu_doc_opened="N",
nu_doc="16",
nu_inst="1",
nb_wf{
cdata_section="Gestión calendario específico"
}
}
}]
是的,你必须确保你的inst总是一个数组:谢谢!这就是我想要的!是的,你必须确保你的inst总是一个数组:谢谢!这就是我想要的!工作完美