2011-12-14 30 views
0

我有一个JSON对象如何解析JSON对象的字符串

{ 
    "data": [{ 
     "user_id":"1", 
     "user_name":"test", 
     "user_phone":"2147483647", 
     "user_email":"[email protected]" 
    }] 
} 

和jQuery的循环功能

$.each(responseData, function(index, ProfileData) { 
    profiles.push(
     application.getModel("Profile", [ ProfileData.user_id, ProfileData.user_name, ProfileData.user_phone, ProfileData.user_email ]) 
    ); 
}); 

但当JSON对象成为这个

{ 
    "data": [{ 
     "firm_id":"1", 
     "firm_name":"Firm", 
     "firm_phone":"2147483647", 
     "firm_email":"[email protected]" 
    }] 
} 

然后我想检查JSON数据是否有userfirm扩展名,也需要我们e代替push()

application.getModel("Profile", [ ProfileData.user_id, ProfileData.user_name, ProfileData.user_phone, ProfileData.user_email ]) 

回答

1

您可以检查一个属性是否存在一个物体里面,像这样:

if('user_id' in ProfileData) 

所以您的解决方案可能是这样的:

$.each(responseData, function(index, ProfileData) { 
    if('user_id' in ProfileData) { 
     profiles.push(
      application.getModel("Profile", [ ProfileData.user_id, ProfileData.user_name, ProfileData.user_phone, ProfileData.user_email ]); 
     ); 
    } else { 
     profiles.push(
      application.getModel("Profile", [ ProfileData.firm_id, ProfileData.firm_name, ProfileData.firm_phone, ProfileData.firm_email ]); 
     ); 
    } 
}); 

另一种方法是合并不同的属性,并使用哪一个定义:

$.each(responseData, function(index, ProfileData) { 
    profiles.push(
     application.getModel("Profile", [ 
      ProfileData.user_id || ProfileData.firm_id, 
      ProfileData.user_name || ProfileData.firm_name, 
      ProfileData.user_phone || ProfileData.firm_phone, 
      ProfileData.user_email || ProfileData.firm_email 
     ]); 
    ); 
}); 
+0

这是一个很好的答案,但关于您的评论,JavaScript对象的JavaScript数组= = JSON。 – graphicdivine 2011-12-14 10:24:08

+0

JSON通常意味着“JavaScript Object Notation”...它涵盖了Javascript内部的对象文字符号和此对象的字符串表示形式(例如,使用JSON.stringify()) – devnull69 2011-12-14 10:25:07

+0

谢谢David解决方案 – user1066679 2011-12-14 10:29:17

0

我认为问题存在于你组织你json数据的方式中。你可能需要在json中分割用户和公司。但是,如果您无法控制json的格式,则可以在处理它之前检查数据对象中是否包含某些数据(如“user_id”)。

0

这将是我的做法。

var responseData = { 
    "data": [{ 
     "user_id": "1", 
     "user_name": "test", 
     "user_phone": "2147483647", 
     "user_email": "[email protected]"}] 
}; 

$.each(responseData.data, function(index, dataRow) { 
    var getModelDataArray = []; 

    $.each(dataRow, function(key, profileData){ 
     getModelDataArray.push(profileData); 
    }); 

    profiles.push(application.getModel("Profile", getModelDataArray)); 
}); 

为了能够使用此方法,您需要知道您可以从服务器获得哪些数据。否则,你最终可能会使用带有不正确getModelDataArray的getModel()。该代码可以在小提琴​​中找到。