开发者

How would I rebuild this JSON Object with JavaScript or jQuery

开发者 https://www.devze.com 2023-04-11 17:15 出处:网络
{ \"oozie\": { \"admin\": {}, \"hosts-list\": [ \"1\" ], \"hostsinfo\": [ { \"host-id\": \"1\", \"details\": \"Failed ProcessHealthMonitor health check 1 times consecutively\",
{
"oozie": {
    "admin": {},
    "hosts-list": [
        "1"
    ],
    "hostsinfo": [
        {
            "host-id": "1",
            "details": "Failed ProcessHealthMonitor health check 1 times consecutively",
            "currstatus": "Warning",
            "currstatusclass": "warning"
        },
        {
            "host-id": "2",
            "details": "Failed ProcessHealthMonitor health check 1 times consecutively",
            "currstatus": "Warning",
            "currstatusclass": "warning"
        },
        {
            "host-id": "4",
            "details": "Failed ProcessHealthMonitor health check 1 times consecutively",
            "currstatus": "Warning",
            "currstatusclass": "warning"
        },
        {
            "host-id": "5",
            "details": "Failed ProcessHealthMonitor health check 1 times consecutively",
            "currstatus": "Warning",
            "currstatusclass": "warning"
        }
    ],
    "status": [
        {}
    ]
},
"single-namenode": {
    "admin": {},
    "hosts-list": [
        "1"
    ],
    "hostsinfo": [
        {
            "host-id": "1",
            "details": "Running Service",
            "currstatus": "Running",
            "currstatusclass": "success"
        }
    ],
    "status": [
        {}
    ]
},
"single-database": {
    "admin": {},
    "hosts-list": [
        "1"
    ],
    "hostsinfo": [
        {
            "host-id": "1",
            "details": "Running Service",
            "currstatus": "Running",
            "currstatusclass": "success"
        }
    ],
    "status": [
        {}
    ]
},
"secondarynamenode": {
    "admin": {},
    "hosts-list": [
        "1"
    ],
    "hostsinfo": [
        {
            "host-id": "1",
            "details": "Running Service",
            "currstatus": "Running",
            "currstatusclass": "success"
        }
    ],
    "status": [
        {}
    ]
},
"datanode": {
    "admin": {},
    "hosts-list": [
        "1"
    ],
    "hostsinfo": [
        {
            "host-id": "1",
            "details": "Failed HttpHealthMonitor health check 2 times consecutively",
            "currstatus": "Warning",
            "currstatusclass": "warning"
        }
    ],
    "status": [
        {}
    ]
},
"web": {
    "admin": {},
    "hosts-list": [
        "1"
    ],
    "hostsinfo": [
        {
            "host-id": "1",
            "details": "Setting Master IP",
            "currstatus": "Dead",
            "currstatusclass": "error"
  开发者_StackOverflow中文版      }
    ],
    "status": [
        {}
    ]
},
"tasktracker": {
    "admin": {},
    "hosts-list": [
        "1"
    ],
    "hostsinfo": [
        {
            "host-id": "1",
            "details": "Running Service",
            "currstatus": "Running",
            "currstatusclass": "success"
        }
    ],
    "status": [
        {}
    ]
},
"jobtracker": {
    "admin": {},
    "hosts-list": [
        "1"
    ],
    "hostsinfo": [
        {
            "host-id": "1",
            "details": "Running Master Service",
            "currstatus": "Running",
            "currstatusclass": "success"
        }
    ],
    "status": [
        {}
    ]
}
}

Ive been at it for days trying to figure this one out and I just can't nail it. I have no control over the actual JSON object and how its output looks like. However I have an entirely different need for it that in its current structure has posed nothing but issues for me.

What I want to do preferably with jQuery is

get the names of the Main objects Oozie, Single-namenode, single-database, secondarynamenode, etc... and rebuild an object for storage that follows a more practical format for use.

What I would like to see in the end is a new object that looks similar to

{ 
  "myservices":{[
     {"name":"oozie", "host-id": "1", "details":"failed process health monitor....", "currstatus":"Warning", "currstatusclass":"warning"},
     {"name":"oozie", "host-id": "2", "details":"failed process health monitor....", "currstatus":"Warning", "currstatusclass":"warning"},
     {"name":"oozie", "host-id": "3", "details":"failed process health monitor....", "currstatus":"Warning", "currstatusclass":"warning"},
     {"name":"oozie", "host-id": "4", "details":"failed process health monitor....", "currstatus":"Warning", "currstatusclass":"warning"},
     {"name":"oozie", "host-id": "5", "details":"failed process health monitor....", "currstatus":"Warning", "currstatusclass":"warning"},
     {"name":"single-namenode", "host-id": "2", "details":"failed process health monitor....", "currstatus":"Warning", "currstatusclass":"warning"}

  ]}

My Latest failed attempt is:

$('.refreshAllb').click(function() {
    var outputCon = '';
    $.getJSON('services.json', function(data) {
        $('#master_service_container').empty();
        $.each(data, function(i, object){
            $.each(object, function(property, value){
                if(property == "hostsinfo")
                {
                    $.each(value, function(propertyX, valueX){
                        outputCon += propertyX[valueX] +'<br>';
                    });
                }
            });
        });
        $('#master_service_container').html(outputCon);
    });
});

As I said Im Ive been at this for days I am at my wits end, any help is greatly appreciated.


Here's an example. Note that your required output is invalid JSON. The myservices property cannot be an object and array as in your example. It should be either an object (associative array) or a standard javascript array:

var input = ... the original object

var output = { myservices: [] };
for (var key in input) {
    if (input.hasOwnProperty(key)) {
        for (var i = 0, hostsinfo = input[key].hostsinfo; i < hostsinfo.length; i++) {
            output.myservices.push({
                'name': key,
                'host-id': hostsinfo[i]['host-id'],
                'details': hostsinfo[i]['details'],
                'currstatus': hostsinfo[i]['currstatus'],
                'currstatusclass': hostsinfo[i]['currstatusclass']
            });
        }
    }
}

// TODO: use the output

Live demo.


Try:

function restructure(data) {
  var result = {myservices: []}, i, name;

  for (name in data) {
    if (data.hasOwnProperty(name) && data[name].hostsinfo !== undefined) {
      for (i = 0; i < data[name].hostsinfo.length; i += 1) {
        result.myservices.push($.extend({name: name}, data[name].hostsinfo[i]));
      }
    }
  }

  return result;
}

// with data being your input data
console.log(data, restructure(data));


var result = {};
var myservices = [];
$.each(data.oozie.hostsinfo,function(key,value){
    var temp = {}
    temp.name = "oozie";
    temp.host-id = value.host-id;
    temp.details = value.details;
    temp.currstatus = value.currstatus;
    temp.currstatusclass = value.currstatusclass;
    myservices.push(temp);
})
$.each(data.single-namenode.hostsinfo,function(key,value){
    var temp = {}
    temp.name = "single-namenode";
    temp.host-id = value.host-id;
    temp.details = value.details;
    temp.currstatus = value.currstatus;
    temp.currstatusclass = value.currstatusclass;
    myservices.push(temp);
})
result.myservices = myservices;
0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号