使用JavaScript/jQuery,我将如何动态排序/使用此JSON对象以支持各种显示?

使用JavaScript/jQuery,我将如何动态排序/使用此JSON对象以支持各种显示?,javascript,jquery,json,sorting,Javascript,Jquery,Json,Sorting,在这根绳子上跑。。并在飞行中根据需要使用它 { "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"
        }
    ],
    "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": [
        {}
    ]
}
}
我有一个类似于上面的字符串,它经常更改。使用Jquery,我希望能够以不同的方式对这个字符串进行动态排序。一个例子是我想列出特定于一台主机的所有服务。或者,我想按服务类型列出所有服务

当前,此字符串支持按服务类型的概念。然而,我真的不能让输出改变我的突发奇想,所以我必须用我得到的工作。也就是说,我应该说的对字符串或对象排序的最佳方法是什么。这样我就可以显示一个块,它将是一个特定主机中的所有服务

我已经试着自己做了几天了,但我什么都没得到我只是想我需要一个新的视角来给我一些想法,因为我跑的方向似乎阻碍了我

我一直在jquery中尝试
each()
,在一些尝试中,我将每个()都嵌套了一些,以做我想做的事情,但我再次惨败

编辑 我想最好是根据我需要的原始信息重建对象。然而,我却被困在收集这些信息的过程中。基本上我需要hostsinfo和hosts信息的主对象名

所以我想返回:

oozie=hostid:1,详细信息:…,currstatus:…,currstatusclass:。。 oozie=hostid:2,详细信息:…,currstatus:…,currstatusclass:。。 oozie=hostid:3,详细信息:…,currstatus:…,currstatusclass:。。 (想象一下上述3行对象格式)

我最近的一次尝试失败了。我已经做了好几天了,我开始失去理智了

$('.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);
    });
});
$('.refreshAllb')。单击(函数(){
var outputCon='';
$.getJSON('services.json',函数(数据){
$(“#主服务_容器”).empty();
$.each(数据、函数(i、对象){
$.each(对象、函数(属性、值){
如果(属性==“主机信息”)
{
$.each(值、函数(propertyX、valueX){
outputCon+=propertyX[valueX]+'
'; }); } }); }); $('#master_service_container').html(outputCon); }); });
查看您的JSON结构,假设您可以控制它,我会稍微更改它,使其成为一个主机数组,并将节点名作为属性。如果你不能改变它,我会先解析它,生成一个你可以使用的数组

然后,我将使用LINQ.js jQuery插件根据需要进行排序和选择

在这里查看linq.js站点:

以及这里的LINQ.js linqpad和API参考:

我不太清楚如何对这个JSON进行排序。但作为一个示例,假设您的节点位于一个名为“nodes”的变量中,我们希望选择正在运行的主机:

var running = $.Enumerable.From(nodes).Where("$.hostsinfo.currstatus == 'Running'").ToArray()

您可以使用更多的查询运算符,这是一个简单的示例。也支持子查询。

查看您的JSON结构,并假设您可以控制它,我会稍微更改它,使其成为一个主机数组,并将节点名作为属性。如果你不能改变它,我会先解析它,生成一个你可以使用的数组

然后,我将使用LINQ.js jQuery插件根据需要进行排序和选择

在这里查看linq.js站点:

以及这里的LINQ.js linqpad和API参考:

我不太清楚如何对这个JSON进行排序。但作为一个示例,假设您的节点位于一个名为“nodes”的变量中,我们希望选择正在运行的主机:

var running = $.Enumerable.From(nodes).Where("$.hostsinfo.currstatus == 'Running'").ToArray()

您可以使用更多的查询运算符,这是一个简单的示例。子查询也受支持。

不幸的是,JSON就是这样,我无法控制该对象。基本上现在是它的吐出,每个服务类型都将与其匹配的主机吐出。假设oozie有3台主机,它会将ozzie作为服务,host1,host2,host3,host4。对于我们想要的一种显示模式来说,这本身是可以的,但是另一种类型的显示是每个显示其服务的主机,比如主机一有一个singlenamenode和ozzie,还有另一个。我们希望根据现有对象显示类似的列表。不幸的是,JSON就是这样,我无法控制该对象。基本上现在是它的吐出,每个服务类型都将与其匹配的主机吐出。假设oozie有3台主机,它会将ozzie作为服务,host1,host2,host3,host4。对于我们想要的一种显示模式来说,这本身是可以的,但是另一种类型的显示是每个显示其服务的主机,比如主机一有一个singlenamenode和ozzie,还有另一个。我们希望根据现有对象显示类似的列表。