разобрать через JSON Jquery - PullRequest
0 голосов
/ 20 апреля 2011
Test.Customers = [{
    "CustomerPortals":[{
        "filename":"chrysanthemum.jpg",
        "ext":"jpg",
        },{
        "name":"Lighthouse.jpg",
        "filename":"lighthouse.jpg",
        "ext":"jpg",
        },{
        "filename":"lighthouse.jpg",
        "ext":"jpg",
        }
        }]

У меня есть этот JSON хранится в моем DOM.Иногда в массиве CustomerPortals будет 0 элементов, а иногда несколько элементов.Но я хочу разобрать их и показать имя файла.Делает ли jquery это проще?

РЕДАКТИРОВАТЬ

РЕДАКТИРОВАТЬ

var Test = {};

Test.Customers = [{"CustomerItems":
                            "Portals":
                            {"id":"1","customer":"1950","resident":"yes",
                            "CustomPortals":
                                        [
                                        {"id":"11","test":"4251","portalname":"tye.jpg"},
                                         {"id":"12","test":"4251","portalname":"Lsdf.jpg"},
                                         {"id":"13","test":"4251","portalname":"nick.jpg"}
                                         ]
                            }
                    },
                    {"CustomerItems":
                            "Portals":
                            {"id":"2","customer":"1952","resident":"yes",
                            "CustomPortals":
                                        [
                                        {"id":"14","test":"4252","portalname":"Chrysanthemum2.jpg"},
                                         {"id":"15","test":"4255","portalname":"navagin.jpg"},
                                         {"id":"16","test":"4257","portalname":"jasoria.jpg"}
                                         ]
                            }
                    },
                    {"CustomerItems":
                            "Portals":
                            {"id":"3","customer":"1950","resident":"yes",
                            "CustomPortals":
                                        [
                                        {"id":"17","test":"4231","portalname":"Zsryanmum1.jpg"},
                                         {"id":"18","test":"4651","portalname":"Ltd1.jpg"},
                                         {"id":"19","test":"4281","portalname":"ser1.jpg"}
                                         ]
                            }
                    }
                ]

Я хочуполучить имя портала для всех клиентов.выше не показывал суб-массивы спасибо

Ответы [ 2 ]

1 голос
/ 20 апреля 2011

Единственное, что я могу подумать о том, что jquery может вам помочь, это функция .each().Вот пример, где я просматриваю каждое имя файла у каждого клиента.

Обновлен код для включения Portals, который содержит CustomerPortals.Дайте мне знать, если я неправильно интерпретировал ваш комментарий.

Снова обновил код, чтобы использовать новый пример кода.Код примера вызывал ошибки, поэтому я добавил {} вокруг «Порталы» и его значения.Если это не тот формат, который предназначен для кода, сообщите мне.

var Test = {};

Test.Customers = [{"CustomerItems":
                            {"Portals":
                                {"id":"1","customer":"1950","resident":"yes",
                                "CustomPortals":
                                            [
                                            {"id":"11","test":"4251","portalname":"tye.jpg"},
                                             {"id":"12","test":"4251","portalname":"Lsdf.jpg"},
                                             {"id":"13","test":"4251","portalname":"nick.jpg"}
                                             ]
                                }
                            }
                    },
                    {"CustomerItems":
                            {"Portals":
                                {"id":"2","customer":"1952","resident":"yes",
                                "CustomPortals":
                                            [
                                            {"id":"14","test":"4252","portalname":"Chrysanthemum2.jpg"},
                                             {"id":"15","test":"4255","portalname":"navagin.jpg"},
                                             {"id":"16","test":"4257","portalname":"jasoria.jpg"}
                                             ]
                                }
                            }
                    },
                    {"CustomerItems":
                            {"Portals":
                                {"id":"3","customer":"1950","resident":"yes",
                                "CustomPortals":
                                            [
                                            {"id":"17","test":"4231","portalname":"Zsryanmum1.jpg"},
                                             {"id":"18","test":"4651","portalname":"Ltd1.jpg"},
                                             {"id":"19","test":"4281","portalname":"ser1.jpg"}
                                             ]
                                }
                            }
                    }
                ]




$(document).ready(function() {

    //Go through each customer
    $.each(Test.Customers, function(customerIndex, customerValue) {

        //Go through each CustomerPortal and display filename
        $.each(customerValue.CustomerItems.Portals.CustomPortals, function(custPortIndex, custPortValue) {

            alert('File ' + custPortValue.portalname + ' in customer ' + customerIndex);

        });

    });

});

РЕДАКТИРОВАТЬ

var Test = {};

Test.Customers = [{"CustomerItems":
                            "Portals":
                            {"id":"1","customer":"1950","resident":"yes",
                            "CustomPortals":
                                        [
                                        {"id":"11","test":"4251","portalname":"tye.jpg"},
                                         {"id":"12","test":"4251","portalname":"Lsdf.jpg"},
                                         {"id":"13","test":"4251","portalname":"nick.jpg"}
                                         ]
                            }
                    },
                    {"CustomerItems":
                            "Portals":
                            {"id":"2","customer":"1952","resident":"yes",
                            "CustomPortals":
                                        [
                                        {"id":"14","test":"4252","portalname":"Chrysanthemum2.jpg"},
                                         {"id":"15","test":"4255","portalname":"navagin.jpg"},
                                         {"id":"16","test":"4257","portalname":"jasoria.jpg"}
                                         ]
                            }
                    },
                    {"CustomerItems":
                            "Portals":
                            {"id":"3","customer":"1950","resident":"yes",
                            "CustomPortals":
                                        [
                                        {"id":"17","test":"4231","portalname":"Zsryanmum1.jpg"},
                                         {"id":"18","test":"4651","portalname":"Ltd1.jpg"},
                                         {"id":"19","test":"4281","portalname":"ser1.jpg"}
                                         ]
                            }
                    }
                ]

Я хочу получитьимя портала для всех клиентов.выше не показывал суб-массивы спасибо

1 голос
/ 20 апреля 2011

Я сомневаюсь в этом. Иерархии объектов JSON не видны как узлы DOM.

Вы можете использовать функцию карты, которую очень легко записать и которая легко доступна в таких библиотеках, как Функциональный JavaScript . Используя это просто:

filenames = Test.Customers[0].CustomerPortals.map(function(cp) { return cp.filename });

Затем делайте что угодно с массивом имен файлов.

РЕДАКТИРОВАТЬ: Чтобы подтвердить это, я запустил следующий код в JavaScript тестовый стенд .

Test = {};

Test.Customers = [{
    "CustomerPortals":[{
        "filename":"chrysanthemum.jpg",
        "ext":"jpg",
        },{
        "name":"Lighthouse.jpg",
        "filename":"lighthouse.jpg",
        "ext":"jpg",
        },{
        "filename":"lighthouse.jpg",
        "ext":"jpg",
        }]
        }];

Array.prototype.map = function(fn) {
              var r = [];
              var l = this.length;
              for(i=0;i<l;i++)
              {
                  r.push(fn(this[i]));
              }
              return r; 
            };

alert(Test.Customers[0].CustomerPortals.map(function(cp) { return cp.filename }));

Отображается предупреждение со следующим сообщением:

chrysanthemum.jpg, lighthouse.jpg, lighthouse.jpg

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