将JSON数组附加到现有JSON数组

问题描述 投票:-1回答:6

我有两个JSON对象数组 - cadsuploads

{
   "cad":[
      {
         "cad_id":246,
         "call_operator":"controller",
         "user_id":"136",
         "date":"2017-12-12 20:44:30",
      }
   ],
   "uploads":[
      {
         "file_id":"1",
         "cad_id":"246",
         "file_category":"prf",
         "file_name":"e9283220bacfe5ca5c6a7edadef37e83.pdf"
      },
      {
         "file_id":"2",
         "cad_id":"246",
         "file_category":"radio_log",
         "file_name":"62d72ee7f69e17b54848df082dd72323.pdf"
      }
   ]
}

我想取uploads数组并将其附加到cads数组,以便它在cads数组中,而不是有两个单独的数组。

{
   "cad":[
      {
         "cad_id":246,
         "call_operator":"controller",
         "user_id":"136",
         "date":"2017-12-12 20:44:30",
         "uploads":[
          {
             "file_id":"1",
             "cad_id":"246",
             "file_category":"prf",
             "file_name":"e9283220bacfe5ca5c6a7edadef37e83.pdf"
          },
          {
             "file_id":"2",
             "cad_id":"246",
             "file_category":"radio_log",
             "file_name":"62d72ee7f69e17b54848df082dd72323.pdf"
          }
       ]
      }
   ]
}

如果有帮助的话,cad数组中只有1个元素。 uploads数组可以有多个项目。

我如何在JS(或jQuery)中执行此操作?

javascript json
6个回答
0
投票

只需将uploads分配到您想要的地方即可。

data.cad[0].uploads = data.uploads;

这假设JSON已被解析为JS对象,由data变量保存。


如果您愿意,您可以删除原始的uploads财产。

delete data.uploads;

0
投票

一种方法 -

var json = {
   "cad":[
      {
         "cad_id":246,
         "call_operator":"controller",
         "user_id":"136",
         "date":"2017-12-12 20:44:30",
      }
   ],
   "uploads":[
      {
         "file_id":"1",
         "cad_id":"246",
         "file_category":"prf",
         "file_name":"e9283220bacfe5ca5c6a7edadef37e83.pdf"
      },
      {
         "file_id":"2",
         "cad_id":"246",
         "file_category":"radio_log",
         "file_name":"62d72ee7f69e17b54848df082dd72323.pdf"
      }
   ]
}
var  newObj= {};
newObj.cad = json.cad;
newObj.cad[0].uploads=  json.uploads;
console.log(newObj);

0
投票

var myArray = {
   "cad":[
      {
         "cad_id":246,
         "call_operator":"controller",
         "user_id":"136",
         "date":"2017-12-12 20:44:30",
      }
   ],
   "uploads":[
      {
         "file_id":"1",
         "cad_id":"246",
         "file_category":"prf",
         "file_name":"e9283220bacfe5ca5c6a7edadef37e83.pdf"
      },
      {
         "file_id":"2",
         "cad_id":"246",
         "file_category":"radio_log",
         "file_name":"62d72ee7f69e17b54848df082dd72323.pdf"
      }
   ]
};
myArray.cad[0].uploads = myArray.uploads;
var newArray = myArray.cad;
console.log(newArray);

0
投票

您可以使用reduce通过cad_id组合数组:

let obj = {"cad":[{"cad_id":246,"call_operator":"controller","user_id":"136","date":"2017-12-12 20:44:30",}],"uploads":[{"file_id":"1","cad_id":"246","file_category":"prf","file_name":"e9283220bacfe5ca5c6a7edadef37e83.pdf"},{"file_id":"2","cad_id":"246","file_category":"radio_log","file_name":"62d72ee7f69e17b54848df082dd72323.pdf"}]};

obj = obj.uploads.reduce((a, b) => {
    const e = a.find(e => e.cad_id == b.cad_id);
    if (! e) return a; // change this to do something different with a not found cat_id
    e.uploads = (e.uploads || []).concat(b);
    return a;
}, obj.cad);

console.log(obj);

请注意,如果cat数组没有具有给定cat_id的项目,则上面不会执行任何操作。例如,您可以更改该行为以创建新类别。


0
投票

遍历每次上传并找到相应的cad。如果该属性不存在,请创建该属性并将该上载添加到该属性。然后最后删除data.uploads

data.uploads.forEach(u => {
  var cad = data.cad.find(c => +c.cad_id === +u.cad_id) ||{};     
  cad.uploads = (cad.uploads || []).concat(u);     
});

delete data.uploads;

console.log(data)
<script>
  var data = {
    "cad": [{
      "cad_id": 246,
      "call_operator": "controller",
      "user_id": "136",
      "date": "2017-12-12 20:44:30",
    }],
    "uploads": [{
        "file_id": "1",
        "cad_id": "246",
        "file_category": "prf",
        "file_name": "e9283220bacfe5ca5c6a7edadef37e83.pdf"
      },
      {
        "file_id": "2",
        "cad_id": "246",
        "file_category": "radio_log",
        "file_name": "62d72ee7f69e17b54848df082dd72323.pdf"
      }
    ]
  }
</script>

0
投票

您可以使用哈希表来获取具有相同cad_id的元素,并将上载对象推送到正确的数组。

分配后从对象中删除属性upload

var data = { cad: [{ cad_id: 246, call_operator: "controller", user_id: "136", date: "2017-12-12 20:44:30" }], uploads: [{ file_id: "1", cad_id: "246", file_category: "prf", file_name: "e9283220bacfe5ca5c6a7edadef37e83.pdf" }, { file_id: "2", cad_id: "246", file_category: "radio_log", file_name: "62d72ee7f69e17b54848df082dd72323.pdf" }] },
    hash = Object.create(null);

data.cad.forEach(function (o) {
    hash[o.cad_id] = (o.uploads = []);
});

data.uploads.forEach(function (o) {
    hash[o.cad_id].push(o);
});

delete data.uploads;

console.log(data);
.as-console-wrapper { max-height: 100% !important; top: 0; }
© www.soinside.com 2019 - 2024. All rights reserved.