2016-11-10 4 views
1

Я читаю записи наборов на экспресс-сервере, используя пакет узла mssql. Чтение значений выводит массив объектов Json, как ожидалось.Как сопоставить новые значения свойств массиву объектов JSON?

Теперь мне нужно изменить значение propoerty Email каждого объекта Json. Так что я попытался шлейфовыми записи и изменение значения по каждому показателю:

  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?

Пример вывода: Пример вывода показан ниже, где новый E-mail свойство было добавлено в конец массива вместо изменения каждого существующего значения свойства:

[ 
    [ 
     { 
     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. Все последующие значения электронной почты объекта остаются неизменными. Например, http://hastebin.com/tanifucitu.pl Любые идеи, почему это так? –

+1

Это потому, что вы делаете 'recordsets.length' в своем цикле' for'. Так как 'recordsets' имеет только один элемент - массив объектов JSON,' 'for' только циклически повторяется. Вам нужно будет изменить его на 'recordsets [0] .length', чтобы получить фактическое количество объектов JSON во внутреннем массиве. – jeffdill2

+1

@BrianJ как в исходном ответе выше, вы используете массив массивов. Таким образом, первый массив имеет только 1 запись. В вашем цикле 'for', если вы не измените' i Beebee

Смежные вопросы