2011-12-14 75 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()。該代碼可以在小提琴​​中找到。