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

标签 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,变量=[trackingcode, v1, v2]},{scopeDef=^https?://([^/:\?]*\.)? delta.com/products,范围=产品部分,变量=[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 对象。

最佳答案

首先,你不需要解析请求,你已经创建了一个对象,只有当你得到 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。这意味着:

  • 属性(property)
  • 对象.属性
  • arrayOfObfects['id'].object.property
  • mainObject.arrayOfObfects['id'].object.property

等等。祝你好运!

关于javascript - 动态添加数组元素到 JSON 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38096415/

相关文章:

javascript - jquery 每次循环dom操作(JSON)

json - 如何从 OpenAPI/Swagger 模型定义生成 JSON 示例?

arrays - 从 json 而不是 Angular 5 数组中获取数据

javascript - 生产服务器中的 MomentJS 给了我一个不同的 unix 时间戳

javascript - 编辑存储在服务器上的文本文件

Javascript 双重排序算法

javascript - 嵌套 forEach 意外覆盖

javascript - 是否有可能在shadow dom中使用twitter bootstrap的css类?

javascript - 有理由不在 JavaScript 中使用严格模式吗?

javascript - vuejs this.posts.$remove(postId) 不是函数