将数组元素动态添加到JSON对象

时间:2016-06-29 10:04:46

标签: javascript arrays 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 个答案:

答案 0 :(得分: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

等等。祝你好运!