2016-06-29 5 views
0

Я создаю объект JSON из массива, и я хочу динамически передавать данные этому объекту JSON на основе значений из массива. Смотрите мой код для лучшего понимания моей проблемы ...Динамически добавлять элементы массива в объект JSON

for(i=0;i<duplicates.length; i++) { 
    var request = { 
    "name": duplicates[i].scope, 
    "id": 3, 
    "rules":[ 
     { 
     "name": duplicates[i].scope + " " + "OP SDR Sync", 
     "tags": [ 
      { 
      "tagId": 1, 
      "variables":[ 
       { 
       "variable": duplicates[i].variable[j], 
       "matchType": "Regex", 
       "value": duplicates[i].scopeDef 
       } 
      ], 
      "condition": false, 
      }, 
      { 
      "tagId": 1, 
      "condition": false, 
      } 
     ], 
     "ruleSetId": 3, 
     } 
    ] 
    } 
} 

Я принимаю свойство объекта из duplicates массива, который может иметь следующие элементы:

[{scopeDef=.*, scope=Global, variable=[trackingcode, v1, v2]}, {scopeDef=^https?://([^/:\?]*\.)?delta.com/products, scope=Products Section, variable=[v3]}]

Как вы можете видеть, объект содержит элемент variable, который может иметь несколько значений. Мне нужно нажимать на объект JSON все эти значения динамически (это означает, что в массиве может быть больше 3 значений).

Например, после того, как я нажимаю все значения из duplicates массива, мой объект JSON должен выглядеть следующим образом:

name=Products Section, 
    rules= 
    [ 
    { 
     name=Products Section OP SDR Sync, 
     tags=[ 
     { 
     variables= 
     [ 
      { 
      matchType=Regex, 
      variable=v3, 
      value=^https?://([^/:\?]*\.)?delta.com/products 
      }, 
      { 
      matchType=Regex, 
      variable=trackingcode, 
      value=.* 
      }, 
      { 
      matchType=Regex, 
      variable=v1, 
      value=.* 
      }, 
      { 
      matchType=Regex, 
      variable=v2, 
      value=.* 
      } 
     ], 
     condition=false, 
     }, 
     { 
     condition=false, 
     tagId=1 
     } 
    ], 
    ruleSetId=3 
    } 
    ] 
} 

Я попытался следующий код, но без успеха:

for(var j in duplicates[i].variable) { 
    var append = JSON.parse(request); 
    append['variables'].push({ 
     "variable":duplicates[i].variable[j], 
     "matchType": "Regex", 
     "value": duplicates[i].scopeDef 
    }) 
    } 

Пожалуйста дайте мне знать, если мне нужно предоставить дополнительную информацию, я только начал работать с объектами JSON.

ответ

1

Прежде всего, вам не нужно разобрать запрос, вы уже создаете объект, разобрать только тогда, когда вы получите JSON в виде строки, как:

var json='{"a":"1", "b":"2"}'; 
var x = JSON.parse(json); 

Далее, у вас есть какое-либо свойство объекта, завернутое в массивах , Для корректной работы с ней вы должны написать:

request.rules[0].tags[0].variables.push({ 
    "variable":duplicates[i].variable[j], 
    "matchType": "Regex", 
    "value": duplicates[i].scopeDef 
}) 

Если вы хотите использовать фрагмент кода, вам потребуются некоторые изменения в запросе:

var request = { 
"name": duplicates[i].scope, 
"id": 3, 
"variables":[ 
    { 
    "variable": duplicates[i].variable[j], 
    "matchType": "Regex", 
    "value": duplicates[i].scopeDef 
    } 
      ], 
"rules":[ 
    { 
    "name": duplicates[i].scope + " " + "OP SDR Sync", 
    "tags": [ 
     { 
     "tagId": 1, 
     "condition": false, 
     }, 
     { 
     "tagId": 1, 
     "condition": false, 
     } 
    ], 
    "ruleSetId": 3, 
    } 
] 
} 
} 

Чтобы понять JSON помнить основное правило: чтение JSON назад. Это означает:

  • недвижимость
  • object.property
  • arrayOfObfects [ 'ID'] объект.свойство
  • mainObject.arrayOfObfects [ 'ID'] object.property

.. и так далее. Удачи!

+0

Спасибо, что помогли мне. Можете ли вы также рассказать мне, что такое 'variables',' tags' и 'tagId'? Объекты? – Valip

+1

В вашем исходном коде: variables - array of objects, tags - array of objects, tagId - variable (actualy - свойство объекта, который является первым элементом в массиве 'tags', который является первым элементом в правилах массива, который является свойством запроса объекта) – Teo

+0

Отлично! Теперь все это имеет смысл для меня, спасибо! – Valip

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