С JavaScript / jQuery Как бы я отсортировал / обработал этот объект JSON на лету для поддержки различных дисплеев? - PullRequest
1 голос
/ 10 октября 2011

Бег по этой цепочке .. и использование ее на лету

{
"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, я хочу иметь возможность сортировать эту строку на лету по-разному. Один из примеров: я хочу перечислить все службы, относящиеся к одному хосту. Или еще я хочу перечислить все услуги по типу услуги.

В настоящее время эта строка поддерживает концепцию типа сервиса. Тем не менее, я не могу изменить вывод на мои прихоти, поэтому мне приходится работать с тем, что я получил. Тем не менее, что является лучшим способом сортировки этой строки или объекта, который я должен сказать. Чтобы я мог показать блок, в котором были бы все службы на одном конкретном хосте?

Я пытался сделать это сам в течение пары дней, и я ничего не получил, я просто думаю, что мне нужен свежий взгляд на это, чтобы дать мне идеи, потому что направления, по которым я бегу, кажутся мне дорогой. .

Я пытался each() в jquery, где я вкладываю по несколько человек в некоторых испытаниях, чтобы делать то, что я хочу, но опять-таки я терплю неудачу.

EDIT Я решил, что лучше просто перестроить объект, основываясь на информации, которая мне нужна из оригинала. Однако я застреваю в сборе этой информации. В основном, я хочу, чтобы hostsinfo и имя основного объекта представляли информацию о хостах.

поэтому я бы хотел вернуться:

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

1 Ответ

1 голос
/ 10 октября 2011

Глядя на вашу структуру JSON и предполагая, что у вас есть контроль над ней, я бы немного изменил ее, чтобы сделать ее массивом хостов с именем узла в качестве свойства. Если вы не можете изменить его, я бы сначала проанализировал его, чтобы создать массив, с которым вы можете работать.

Затем я бы использовал плагин LINQ.js jQuery для сортировки и выбора при необходимости.

Посетите сайт linq.js здесь:

http://linqjs.codeplex.com/

И ссылка LINQpad и API LINQ.js здесь:

http://neue.cc/reference.htm

Мне не совсем понятно, как вы хотите отсортировать этот JSON. Но в качестве примера, давайте предположим, что ваши узлы находятся в переменной, называемой «узлами», и мы хотим выбрать работающие хосты:

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

Есть еще много операторов запросов, которые вы можете использовать, это простой пример. Подзапросы также поддерживаются.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...