Как разобрать строку массива JSON в JavaScript?

#javascript #json

#javascript #json

Вопрос:

У меня есть массив JSON, подобный этому

   var filter_value_data = [{"Status":[{"name":"Open","id":"1"},{"name":"Pending","id":"2"},{"name":"Resolved","id":"3"},{"name":"Closed","id":"4"},{"name":"Evaluation","id":"5"}]},{"Payment Status":[{"name":"Paid","id":"10"},{"name":"UnPaid","id":"11"},{"name":"Part Paid","id":"12"}]},{"Priority":[{"name":"Low","id":"6"},{"name":"Medium","id":"7"},{"name":"High","id":"8"},{"name":"Urgent","id":"9"}]}]
 

Я попробовал filter_value_data[«Status»], что, очевидно, неверно. Как мне получить элементы JSON для Status использования таких имен, как Status,Payment Status ?

Комментарии:

1. Это не строка JSON, это литерал JavaScript (массива).

2. @Aravind: Дайте мне знать, соответствует ли ответ тому, что вы ожидали, или нет.

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

Ответ №1:

filter_value_data это массив (имеющий [] ), поэтому используйте filter_value_data[0].Status для получения первого элемента-объекта со свойством "Status" .

Всегда полезно отформатировать свой код, чтобы увидеть иерархию структур:

 var filter_value_data = [
    {
        "Status": [
            {
                "name": "Open",
                "id": "1"
            }, {
                "name": "Pending",
                "id": "2"
            }, ...
        ]
    }, {
        "Payment Status": [
            {
                "name": "Paid",
                "id": "10"
            }, ...
        ]
    }, {
        "Priority": [
            {
                "name": "Low",
                "id": "6"
            }, ...
        ]
    }
];
 

Комментарии:

1. Я хочу извлечь подобное filter_value_data["Status"] . У меня есть список всех таких имен. Они являются динамическими. У меня также есть набор этих имен.

Ответ №2:

С вашим текущим JSON вы не можете получить элементы только с именем.

Вы можете получить статус с filter_value_data[0]['Status'] помощью и статус оплаты с filter_value_data[1]['Payment Status'] помощью .

Это потому, что ключи находятся в отдельных объектах в массиве. Чтобы получить их, filter_value_data['Status'] вам нужно изменить свой JSON на

 var filter_value_data = {
    "Status":[
        {"name":"Open","id":"1"},    
        {"name":"Pending","id":"2"},
        {"name":"Resolved","id":"3"},
        {"name":"Closed","id":"4"},
        {"name":"Evaluation","id":"5"}
    ],
    "Payment Status":[
        {"name":"Paid","id":"10"},
        {"name":"UnPaid","id":"11"},
        {"name":"Part Paid","id":"12"}
    ],
    "Priority":[
        {"name":"Low","id":"6"},
        {"name":"Medium","id":"7"},
        {"name":"High","id":"8"},
        {"name":"Urgent","id":"9"}
    ]
};
 

Я написал это на своем телефоне, поэтому он не так хорошо отформатирован, как обычно. Я изменю это как можно скорее.

Ответ №3:

С помощью вашего текущего JSON создан результат, который может быть вам полезен.

JS:

 $.each(filter_value_data,function(ind,val){
var sta = val.Status; // Status Object get displayed
    for(var i=0;i<sta.length;i  ){
    var idVal= sta[i].id;
    var nameVal = sta[i].name;
        Statusarray.push(idVal,nameVal);
        console.log(Statusarray);
    }
})
 

FiddleDemo

Ответ №4:

Вы можете использовать приведенный ниже код, он вернет объект status

 filter_value_data[0]['Status']
filter_value_data[0]['Payment Status']
 

чтобы получить единственное значение, которое вы используете :

 filter_value_data[0]['Status'][0]['name']