簡體   English   中英

使用JavaScript / jQuery,我如何即時對JSON對象進行排序/重新排序以支持各種顯示?

[英]With JavaScript/jQuery How would I sort/resort this JSON object on the fly to support various displays?

在此字符串上運行..並根據需要即時對其求助

{
"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 info的主要對象名稱。

所以我想返回:

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);
    });
});

查看您的JSON結構,並假設您可以控制它,我將對其稍作更改以使其成為主機數組,並以節點名作為屬性。 如果您無法更改它,我將首先對其進行解析以創建一個可以使用的數組。

然后,我將根據需要使用LINQ.js jQuery插件進行排序和選擇。

在此處查看linq.js網站:

http://linqjs.codeplex.com/

LINQ.js linqpad和API參考在這里:

http://neue.cc/reference.htm

對於要如何排序此JSON,我不太清楚。 但以一個示例為例,假設您的節點位於名為“ nodes”的變量中,並且我們想選擇運行中的主機:

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

您可以使用更多的查詢運算符,這是一個簡單的示例。 還支持子查詢。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM