Доступ к данным в многомерном массиве JSON с помощью jQuery - PullRequest
5 голосов
/ 11 апреля 2011

Я пытаюсь выяснить, как получить доступ к данным в существенно многомерном массиве JSON.

Мой запрос jQuery AJAX выглядит следующим образом:

 $("#login-form").submit(function(e) {
 e.preventDefault();
 $.ajax({
   type: 'POST',
   url: '/ajax/login',
   data: 'email='+$("#email").val()+'&password='+$("#password").val(),
   success: function(data){

     // FIRE ALERT HERE        
     alert(data.firstname);

     },
     dataType: 'json'
  });
});

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

{
    "logged_in":true,
    "firstname":"Joe",
    "surname":"Bloggs",
    "Full_name":"Joe Bloggs",
    "email":"email@website.com",
    "phone":"+123456789",
    "website":"",
    "age":"26-35",
    "street":"1 Street Ave",
    "city":"Townland",
    "state":"NA",
    "postcode":"1234",
    "country":"Australia",
    "products":2,
    "0":{
        "product_no":"1087",
        "customer":"2",
        "bought_from":"1",
        "date_of_purchase":"2011-04-08",
        "method":"instore",
        "invoice":"0",
        "current":"1"
    },
    "1":{
        "product_no":"24",
        "customer":"2",
        "bought_from":"1",
        "date_of_purchase":"2011-04-08",
        "method":"instore",
        "invoice":"0",
        "current":"1"
    }
}

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

Предложения будут приветствоваться.

Ответы [ 4 ]

3 голосов
/ 11 апреля 2011

Внутри вашей функции успеха вы можете обрабатывать данные JSON как объект JavaScript. Вы можете получить доступ к массиву продукта и объектам внутри него следующим образом:

console.log(data.products + " product(s) in data"); // data.products is 2 (integer)
for(var i = 0; i < data.products; i++) {            // 
    var product = data[i.toString()];               // 0.toString() is "0"
                                                    // data["0"] is what you want
                                                    // now product points to the property "0"
    console.log(product.product_no);                // so you can use product.xxx
                                                    // or product["xxx"]
}                                                   // likewise for "1", "2", "3" and so on

Замените console.log на alert, если вы не знаете, что такое консоль.

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

Доступ к каждой детали продукта можно получить через data[iProductIndex.toString()] member. Данные хранятся внутри data["0"] и data["1"], поэтому для доступа к ним вам необходимо преобразовать целочисленное значение в строку. К сожалению, вы не сможете использовать цикл $.each, потому что «0» и «1» являются отдельными объектами-членами. Используйте для цикла с iProductIndex.

0 голосов
/ 11 апреля 2011

попробуйте

<script type="text/javascript">
var json_string={
    "logged_in":true,
    "firstname":"Joe",
    "surname":"Bloggs",
    "Full_name":"Joe Bloggs",
    "email":"email@website.com",
    "phone":"+123456789",
    "website":"",
    "age":"26-35",
    "street":"1 Street Ave",
    "city":"Townland",
    "state":"NA",
    "postcode":"1234",
    "country":"Australia",
    "products":2,
    "0":{
        "product_no":"1087",
        "customer":"2",
        "bought_from":"1",
        "date_of_purchase":"2011-04-08",
        "method":"instore",
        "invoice":"0",
        "current":"1"
    },
    "1":{
        "product_no":"24",
        "customer":"2",
        "bought_from":"1",
        "date_of_purchase":"2011-04-08",
        "method":"instore",
        "invoice":"0",
        "current":"1"
    }
};

for (key in json_string) {
// Most modern browsers should have hasOwnProperty by now.
// This keeps us from getting farther up the chain.
if (json_string.hasOwnProperty(key)) {
document.write(key + "->" + json_string[key]);
document.write("<br>");
}
}; 


var pro_1= json_string[0]; // here u change 0 with 1 and get the data of "1"

for (key in pro_1) {
if (pro_1.hasOwnProperty(key)) {
document.write(key + "->" + pro_1[key]);
document.write("<br>");
}
}; 

</script>
0 голосов
/ 11 апреля 2011

Предоставленные данные не позволяют ответить на ваш вопрос, Салман А. См. Массивы JSON для определения массива, чтобы он работал так, как он должен быть определен как

{"products" : [ {"product_no":"1087",
        "customer":"2",
        "bought_from":"1",
        "date_of_purchase":"2011-04-08",
        "method":"instore",
        "invoice":"0",
        "current":"1"} ] }

К ОП: оповещения (данные [ "0"] product_no.); оповещения (данные [ "1"] [ "date_of_purchase"]);

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