Динамически добавлять элементы массива в объект 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.

0
29 июн. '16 в 10:04
источник поделиться
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']. object.property
  • mainObject.arrayOfObfects [ 'ID']. object.property

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

+1
29 июн. '16 в 11:49
источник

Посмотрите другие вопросы по меткам или Задайте вопрос