2016-11-10 318 views
1

我正在使用節點mssql包在快速服務器中讀回記錄集。回讀這些值會按預期輸出Json對象的數組。如何將新的屬性值映射到JSON對象數組?

現在我需要修改每個Json對象的Email propoerty值。所以,我想通過記錄循環和各項指標在不斷變化的價值:

  var request = new sql.Request(sql.globalConnection); 
      request.input('p_email', sql.VarChar(50), userEmail); 
      request.execute('GetDDMUserProfile', function(err, recordsets, returnValue) {  

       for (var i = 0; i < recordsets.length; i++){ 
        recordsets[i].Email = "[email protected]"; 

       } 

       console.log(recordsets); 

      }); 

但不是修改每個JSON對象的Email值,該代碼只是附加了一個新的電子郵件屬性的最後一個JSON對象。

如何將新屬性值映射到JSON對象數組?

輸出示例: 輸出的一個例子如下所示,其中一個新的電子郵件屬性已被添加到該陣列的端部,而不是改變各現有屬性值:

[ 
    [ 
     { 
     ID:[ 
      4 
     ], 
     UserName:"Brian", 
     Email:"[email protected]" 
     }, 
     { 
     ID:[ 
      5 
     ], 
     UserName:"Brian", 
     Email:"[email protected]" 
     }  
    Email:'[email protected]' ] 
] 

回答

1

問題這裏是你的數據集看起來不是一個JSON對象數組,而是一個JSON對象數組數組。如果你肯定知道你會永遠擁有最上面的陣列中只有一個數組,然後就可以解決的問題是這樣的:

recordsets[0][i].Email = "[email protected]"; 

始終瞄準最上面的陣列中的第一陣列。但是,如果最頂層的數組可能有多個數組,那麼這將是另一個需要解決的問題。

+0

所以我以前試過'recordsets [0] [i] .Email =「[email protected]」;'它只修改第一個json對象的Email值。所有後續對象的電子郵件值保持不變。例如http://hastebin.com/tanifucitu.pl有什麼想法,爲什麼? –

+1

這是因爲你在'for'循環中執行'recordsets.length'。由於'recordsets'只有一個元素 - JSON對象數組--'''只循環一次。您需要將其更改爲'recordsets [0] .length'以獲取內部數組中的JSON對象的實際數量。 – jeffdill2

+1

@BrianJ在上面的原始答案中,您使用的是數組數組。所以第一個數組只有1個條目。在你的for循環中,如果你不把'i Beebee