Нужна помощь в разборе этого объекта в JSON (JavaScript) - PullRequest
0 голосов
/ 28 апреля 2011

Я пытаюсь проанализировать данные JSON (внизу), используя метод JSON.parse в javascript. Ниже приведен код.

 var i;
 var myData={};
 $(document).ready(function(){

        $.get("http://localhost:4567/get/233307/loc/15000/10", function(data){
                display(data);

            }, "json");
    });
 function display(x){
    for(i = 0; i <= x.length;i++){
        myData = JSON.parse(x[i]);
    }
    alert(myData[2].uid);
 }

Код выше, по моему мнению, должен анализировать данные JSON и сохранять их в myData. Но предупреждение, которое должно было дать мне 233307, дает мне undefined. Я чувствую, что делаю все правильно. Любая помощь? Спасибо.

{"id":64567868968,"uid":233307,"lat":41.418972,"long":-72.8941315,"date":"2010-11-11T16:01:15-05:00"},{"id":64567803255,"uid":
233307,"lat":41.4189505,"long":-72.89411,"date":"2010-11-11T16:00:13-05:00"},{"id":64567803254,"uid":233307,"lat":
41.4189451666667,"long":-72.8940725,"date":"2010-11-11T15:59:11-05:00"},{"id":64567803253,"uid":233307,"lat":
41.4188646666667,"long":-72.8940831666667,"date":"2010-11-11T15:58:08-05:00"},{"id":64567803252,"uid":233307,"lat":
41.4190095,"long":-72.8941905,"date":"2010-11-11T15:57:06-05:00"},{"id":64567700284,"uid":233307,"lat":
41.418972,"long":-72.894169,"date":"2010-11-11T15:56:04-05:00"}

Ответы [ 3 ]

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

Я вижу три вопроса:

  1. Вам не нужно JSON.parse();указав json в качестве dataType для запроса GET, вы просите jQuery автоматически проанализировать ответ в JSON.Поэтому, когда вызывается display(), x уже является объектом JSON, а не строкой, которую необходимо проанализировать.

  2. Похоже, вы хотите перебрать массив в display() но пример ответа - это не массив, это просто список JSON-объектов, разделенных запятыми.Это НЕ допустимый JSON, если он не был заключен в [] (что делает его массивом).Если это действительно ваш ответ, то jQuery не сможет его проанализировать и x будет не определен.

  3. Наконец, (как только вы исправите # 2), вы уже выполняете итерациюпо массиву и myData получает (пере) назначается с каждой итерацией цикла к следующему объекту JSON и, наконец, устанавливается на последний объект JSON, который не является массивом, поэтому myData[2] недопустим.Это должно быть просто myData.uid.Или вместо итерации по массиву, поскольку все они имеют одинаковый uid, вы можете вместо этого изменить display() на:

     function display(x){
        if(x && x.length > 0){
            alert(myData[0].uid);
        }
     }
    
0 голосов
/ 28 апреля 2011

Вы имеете в виду это:

function display(x){
    var myData = [];
    for(i = 0; i <= x.length; i++){
        myData.push(JSON.parse(x[i]));
    }
    alert(myData[2].uid);
}

?Каждая итерация вашего цикла перезаписывает предыдущие «myData».Я также не могу сказать, что вы пытаетесь сделать с переменной x ... Это объект JSON, а не массив, и он также не содержит строк, поэтому вы не можете их оценить.

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

Вам не хватает скобок массива вокруг ваших объектов

[{"id":64567868968,"uid":233307,"lat":41.418972,"long":-72.8941315,"date":"2010-11-11T16:01:15-05:00"},{"id":64567803255,"uid":
233307,"lat":41.4189505,"long":-72.89411,"date":"2010-11-11T16:00:13-05:00"},{"id":64567803254,"uid":233307,"lat":
41.4189451666667,"long":-72.8940725,"date":"2010-11-11T15:59:11-05:00"},{"id":64567803253,"uid":233307,"lat":
41.4188646666667,"long":-72.8940831666667,"date":"2010-11-11T15:58:08-05:00"},{"id":64567803252,"uid":233307,"lat":
41.4190095,"long":-72.8941905,"date":"2010-11-11T15:57:06-05:00"},{"id":64567700284,"uid":233307,"lat":
41.418972,"long":-72.894169,"date":"2010-11-11T15:56:04-05:00"}]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...