2016-11-10 299 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

相关问题