[英]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網站:
LINQ.js linqpad和API參考在這里:
對於要如何排序此JSON,我不太清楚。 但以一個示例為例,假設您的節點位於名為“ nodes”的變量中,並且我們想選擇運行中的主機:
var running = $.Enumerable.From(nodes).Where("$.hostsinfo.currstatus == 'Running'").ToArray()
您可以使用更多的查詢運算符,這是一個簡單的示例。 還支持子查詢。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.