如何将新的属性值映射到JSON对象数组?
问题描述:
我正在使用节点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]' ]
]
答
问题这里是你的数据集看起来不是一个JSON对象数组,而是一个JSON对象数组数组。如果你肯定知道你会永远拥有最上面的阵列中只有一个数组,然后就可以解决的问题是这样的:
recordsets[0][i].Email = "[email protected]";
始终瞄准最上面的阵列中的第一阵列。但是,如果最顶层的数组可能有多个数组,那么这将是另一个需要解决的问题。
所以我以前试过'recordsets [0] [i] .Email =“[email protected]”;'它只修改第一个json对象的Email值。所有后续对象的电子邮件值保持不变。例如http://hastebin.com/tanifucitu.pl有什么想法,为什么? –
这是因为你在'for'循环中执行'recordsets.length'。由于'recordsets'只有一个元素 - JSON对象数组--'''只循环一次。您需要将其更改为'recordsets [0] .length'以获取内部数组中的JSON对象的实际数量。 – jeffdill2
@BrianJ在上面的原始答案中,您使用的是数组数组。所以第一个数组只有1个条目。在你的for循环中,如果你不把'i
Beebee