Javascript 如何处理Json数据,这些数据有时返回一个对象数组,有时返回一个对象?
我正在从服务器获取一些Json,通过这些Json在dom中动态构建一个表。 当存在多个对象时,数据将作为对象数组返回 像这样:Javascript 如何处理Json数据,这些数据有时返回一个对象数组,有时返回一个对象?,javascript,jquery,Javascript,Jquery,我正在从服务器获取一些Json,通过这些Json在dom中动态构建一个表。 当存在多个对象时,数据将作为对象数组返回 像这样: { "ProductList": { "Products": [{ "ProductID": "1", "Name": "ProdName"}, { "ProductID": "2", "Name": "ProdName2"}]
{
"ProductList": {
"Products": [{
"ProductID": "1",
"Name": "ProdName"},
{
"ProductID": "2",
"Name": "ProdName2"}]
}
}
{
"ProductList": {
"Products": {
"ProductID": "3",
"Name": "ProdName3"
}
}
}
if ($.isArray(productDetails.ProductList.Products) === true) {
for (i = 0; i < productDetails.ProductList.Products.length; i++) {
//Create the dom elements by accessing the object properties with [i]
//ie. productDetails.ProductList.Products[i].ProductsID
}
}
else {
//Create the dom elements by accessing the object properties w/o [i]
//ie. productDetails.ProductList.Products.ProductsID
}
但是,当只有一个对象时,它仅作为对象而不是像这样的数组返回:
{
"ProductList": {
"Products": [{
"ProductID": "1",
"Name": "ProdName"},
{
"ProductID": "2",
"Name": "ProdName2"}]
}
}
{
"ProductList": {
"Products": {
"ProductID": "3",
"Name": "ProdName3"
}
}
}
if ($.isArray(productDetails.ProductList.Products) === true) {
for (i = 0; i < productDetails.ProductList.Products.length; i++) {
//Create the dom elements by accessing the object properties with [i]
//ie. productDetails.ProductList.Products[i].ProductsID
}
}
else {
//Create the dom elements by accessing the object properties w/o [i]
//ie. productDetails.ProductList.Products.ProductsID
}
所以我一直在做的是检查它是否是这样一个数组:
{
"ProductList": {
"Products": [{
"ProductID": "1",
"Name": "ProdName"},
{
"ProductID": "2",
"Name": "ProdName2"}]
}
}
{
"ProductList": {
"Products": {
"ProductID": "3",
"Name": "ProdName3"
}
}
}
if ($.isArray(productDetails.ProductList.Products) === true) {
for (i = 0; i < productDetails.ProductList.Products.length; i++) {
//Create the dom elements by accessing the object properties with [i]
//ie. productDetails.ProductList.Products[i].ProductsID
}
}
else {
//Create the dom elements by accessing the object properties w/o [i]
//ie. productDetails.ProductList.Products.ProductsID
}
if($.isArray(productDetails.ProductList.Products)==true){
对于(i=0;i
它可以工作,但我有很多代码完全相同,除了访问对象属性的方式,每当我更改一个时,我需要记住更改另一个,否则我会遇到问题。
在客户端,他们是否有更好的方法来处理此问题?如果没有,如何将
产品
转换为阵列
var products = productDetails.ProductList.Products;
if (!$.isArray(products)) {
products = new Array(products);
}
... all logic here
。。。创建一个函数
function maybeArray(obj, func) {
if ($.isArray(obj))
$.each(obj, func);
else
func(0, obj);
}
...
maybeArray(productDetails.ProductList.Products, function(i, product) {
create DOM element for `product`;
});
使其始终为数组
if(!$.isArray(productDetails.ProductList.Products)){
productDetails.ProductList.Products = [productDetails.ProductList.Products];
}
无论子对象是1个还是多个对象,都以数组的形式返回子对象不是更好吗?这就是我用来处理JSON输出刚从XML转换而来的Web服务的方式。