如何使用NODE JS合并两个Array JSON嵌套响应?

时间:2017-11-16 09:40:43

标签: node.js

1。第一个响应是具有两个字段的类别,类别和名称。

categories = [{ category: '1', name: 'category1' },
              { category: '2', name: 'category2' }]

2。第二个响应是提交三个字段,commit,branch和Commit ID。

 commits = [{ commit: '1', branch: '1', Commit ID: 'commitid1' },
            { commit: '1', branch: '2', Commit ID: 'commitid2' }]

3。我想根据具有以下结构的类别创建一个合并的JSON:

all = [
       { category: '1', name: 'category1', 
             body: [{ commit: '1', branch: '1', Commit ID: 'commitid1' }],
        { category: '2', name: 'category2',
              body: [{ commit: '1', branch: '1', Commit ID: 'commitid2' }]
  

我搜索并找到了几种连接或扩展两个json对象的方法,但没有类似的方法。

     

任何帮助都将不胜感激。

我的实际代码

exports.getIssues = function(req, res) {
console.log(filename + '>>get Issues>>');
var response = {
  status: Boolean,
  message: String,
  data: String
};
var request = require('request');
var username =
  const.username;
var password =
  const.password;
var options = {
  url: 'https://computenext.atlassian.net/rest/api/2/search?jql=status+%3D+Resolved+ORDER+BY+updated',
  auth: {
    username: username,
    password: password
  }
};

request(options, function(error, obj) {
      if (error) {
        response.message = appmsg.DATA_NT_FOUND;
        response.status = false;
        response.data = obj;
        res.send(response);
      } else {
        response.message = appmsg.DATA_FOUND;
        response.status = true;
        response.data = JSON.parse(obj.body);
        //res.send(response);
        var issueKey = response.data.issues;

        // var keyData = issueKey[0].key;
        // console.log(response.data.issues);
        // console.log(keyData);
        var output = [];
        for (var i = 0; i < issueKey.length; i++) {
          var issue = issueKey[i].key;
          //var key = [];
          //key.push(issue);
          console.log(issue);

          var respon = {
            status: Boolean,
            message: String,
            data: String
          };
          var request = require('request'),
            username =
            const.username,
            password =
            const.username,
            url = "https://computenext.atlassian.net/rest/api/2/issue/" + issue,
            auth = "Basic " + new Buffer(username + ":" + password).toString("base64");

          //console.log(url);
          request({
            url: url,
            headers: {
              "Authorization": auth
            }
          }, function(err, object) {
            if (object) {

              var info = object;
              output.push(info); // this is not working as ouput is undefined at this    point
              //var pout = JSON.parse(output);
              //console.log(info);
              console.log("==============================================================================");
              //console.log(output);
              console.log("******************************************************************************");
              if (issueKey.length === output.length) {
                respon.message = appmsg.DATA_FOUND;
                respon.status = true;
                respon.data = output;
                //console.log(output);
                //res.send(respon);


                var id = issueKey[0].id;
                console.log(id);

                var commitout = [];
                for (var i = 0; i < issueKey.length; i++) {
                  var commits = issueKey[i].id;
                  console.log(commits);



                  var request = require('request'),
                    username =
                    const.username,
                    password =
                    const.password,
                    url = "https://computenext.atlassian.net/rest/dev-status/1.0/issue/detail?issueId=" + commits + "&applicationType=stash&dataType=repository",
                    auth = "Basic " + new Buffer(username + ":" + password).toString("base64");

                  //console.log(url);
                  var test = [];
                  request({
                      url: url,
                      headers: {
                        "Authorization": auth
                      }
                    }, function(err, obj1) {
                      if (obj1) {

                        var info1 = obj1.body;
                        commitout.push(info1);
                        if (issueKey.length === commitout.length) {
                          respon.message = appmsg.DATA_FOUND;
                          respon.status = true;
                          respon.data = commitout;
                          // console.log(commitout);
                          //var test = merge(output, commitout);

                          var resultdone = [];
                          request({
                            url: url,
                            headers: {
                              "Authorization": auth
                            }
                          }, function(err, obj1) {
                            if (obj1) {

                              var info1 = obj1.body;
                              commitout.push(info1);
                              if (issueKey.length === commitout.length) {

                                // console.log(commitout);
                                //var test = merge(output, commitout);
                                //var text = output.body[0]; 
                                //var resultdone = [];
                                resultdone.push(commitout.concat(output));
                                console.log(resultdone);
                                respon.message = appmsg.DATA_FOUND;
                                respon.status = true;
                                respon.data = resultdone;
                                res.send(respon);
                              }
                            }
                          });
                        }

                      }
                    }

                  });

              }
            }

          });

3 个答案:

答案 0 :(得分:0)

这个怎么样?

var all= categories.map(function(cat){
                           cat.body=commits.filter(x=>x.branch==cat.category);
                           return cat;
         })

答案 1 :(得分:0)

也许尝试以下方法:

var all = [];

categories.forEach((e)=>{

  var myIndex = categories.indexOf(e);

  e.body=commits[myIndex];

  all.push(e);

});

console.log(all);

然后,您可以使用JSON.stringify获取所需的输出。

答案 2 :(得分:0)

我对此进行了测试并且有效:

var all= categories.map(function(cat,index){
             cat.body=commits[index];
             return cat;
})

如果您想将“body”属性作为数组:

var all= categories.map(function(cat,index){
  var body = [];
  body.push(commits[index]);
             cat["body"] = body;
             return cat;
})

console.log("all :",JSON.stringify(all));