2016-08-20 18 views
2

我從科爾多瓦應用程序通過一個jQuery Ajax調用接受我的NodeJS應用程序數據後,JSON格式的錯誤,它的格式爲jQuery的AJAX

{ 
    "network[msisdn]": "+254738XXXXXX", 
     "network[country]": "ke", 
     "network[roaming]": "false", 
     "network[simState]": "Ready", 
     "network[network]": "HSPA", 
     "network[simSerial]": "89254031021032011310", 
     "network[subscriber]": "639031023201131", 
     "network[service]": "GSM" 
} 

而不是通常的

{ 
    network: {  
       "msisdn" : "", 
       ... 
      } 
} 

我可以循環瀏覽Cordova手機應用程序中的對象,同時訪問嵌套按鍵,如objectName .network.msisdn但我無法一次接收到我的nodejs後端中的數據。

我張貼的數據如下圖所示

$.ajax({ 
     url: 'http://'+$scope.api.host+':'+$scope.api.port+'/notices', 
     method: 'POST', 
     dataType: 'json', 
     data: $scope.storage.history[0] 
     }).then(function(response){ 

      //! STORE THE RESULT IN THE RELEVANT OBJECT 
      $scope.storage.history[nextPos].locale = response; 
      alert(JSON.stringify(response)); 

     }); 

我想從訪問對象的子項。

我已經試過Json.Parse(Json.stringify(對象名))發佈數據之前,

我也曾嘗試後沒有jQuery的AJAX調用JSON數據類型

我已嘗試JSON.parse()後臺對象都無濟於事。

我非常感謝您的協助。

+0

我不明白,你需要格式化這種方式('網[MSISDN]')的對象? – Bamieh

+0

感謝關注艾哈邁德Bamieh,我需要它格式爲network.msisdn,但我得到的關鍵「網絡[msisdn]」的對象,而不是 –

回答

3

如果您無法更改數據的返回方式,則可以使用字符串表示法訪問它。這是一個使用字符串符號的例子,也是一個可用於將其轉換爲嵌套對象的函數,以便您可以使用點符號。

var exampleData = { 
 
    "network[msisdn]": "+254738XXXXXX", 
 
    "network[country]": "ke", 
 
    "network[roaming]": "false", 
 
    "network[simState]": "Ready", 
 
    "network[network]": "HSPA", 
 
    "network[simSerial]": "89254031021032011310", 
 
    "network[subscriber]": "639031023201131", 
 
    "network[service]": "GSM", 
 
    "simpleKey": "simpleValue" 
 
} 
 

 
console.log(exampleData['network[country]']); // Logs -> ke 
 

 
// This converts the keys in place 
 
// it can be modified to return a new object instead 
 
function convertKeys(data) { 
 
    var pieces; 
 
    for(var key in data) { 
 
    if (data.hasOwnProperty(key)) { 
 
     pieces = key.match(/(.+)\[(.+)]/); 
 
     if (pieces) { 
 
     data[pieces[1]] = data[pieces[1]] || {}; 
 
     data[pieces[1]][pieces[2]] = data[key]; 
 
     delete data[key]; 
 
     } 
 
    } 
 
    } 
 
} 
 

 
convertKeys(exampleData); 
 
console.log(exampleData); 
 
console.log(exampleData.network.simState); // Logs -> Ready

+0

感謝@rdbya,您的解決方案的工作原理,但一旦我用我的數據替換它,我得到的錯誤:** data.hasOwnProperty不是一個函數** –

+0

@rdbya,非常感謝。我已經通過用if(data [key])以及if(pieces)...代替這行代碼來驗證,以防止簡單的鍵值對被操縱。 –

+1

@ ianmin2很高興你明白了。我更新了我的答案,以包含您提到的更改。 – rdubya