2013-12-10 4 views
3

У меня есть PHP вывод многомерного массива JSON следующим образом:JQuery parseJSON многомерного-массив

{"rates":[{"meter":"30","rate":"0.15060","ppd":"10.000"}]} 

Однако я получаю сообщение об ошибке при попытке расшифровать его на стороне JavaScript вещей.

Uncaught TypeError: Cannot read property 'length' of null 

Вот код ниже для стороны JQuery вещей:

success: function (result) { 
    console.log(result); 
    $.each($.parseJSON(result), function (item, value) { 
     if (item == "rates") { 
      $.each($.parseJSON(value), function (i, object) { 
       console.log(i + "=" + object); 
      }); 
     } 

1-лог консоли дает мне выход, я уже упоминал в верхней части, но по некоторым причинам я не могу получить доступ массив, как я и думал.

Любая помощь очень ценится :)

+0

я могу заметить некоторые проблемы, но они не объясняют ошибку. Является ли обратный вызов первого '.each' даже выполненным? –

+0

вы должны получить сообщение об ошибке «Uncaught SyntaxError: Неожиданный токен o' во второй команде parseJSON .. не могу объяснить ошибку, которую вы получаете –

+0

@FelixKling да 1-й $ .each выполняется. –

ответ

12

Вам не нужно снова позвонить parseJSON по значению. Это уже объект

var result='{"rates":[{"meter":"30","rate":"0.15060","ppd":"10.000"}]}'; 
console.log(result); 
$.each($.parseJSON(result), function (item, value) { 
    if (item == "rates") { 
     $.each(value, function (i, object) { 
      $.each(object, function (subI, subObject) { 
       console.log(subI + "=" + subObject); 
      }); 
     }); 

    } 
}); 

Кроме того, упаковывают вы задавались вопросом, ошибка происходит потому, что вы пытаетесь вызвать parseJSON на объекте и parseJSON ожидает строку, так что возвращается нуль в каждой функции, которая затем пытается сделать цикл for на основе null.length

+0

Это, однако, не объясняет ошибку. * edit: * Странно, что я получил другую ошибку, чем OP. –

+0

Это исправило ошибку, но это не совсем то, что я получаю после. Я теперь получаю: «0 = [object Object]» –

+1

@ SeánMcCabe: Ну, это потому, что вы пытаетесь преобразовать объект в строку. Ожидается этот выход. Строковое представление объекта по умолчанию - '[object Object]'. Вместо этого вы можете использовать 'console.log (i, object)'. –

5

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

$.each($.parseJSON(result).rates, function (i, object) { 
    console.log(i + "=" + object); 
}); 

Если вы используете метод специально для получения JSON, или если тип содержимого правильно настроен на ответ, вы не должны даже разобрать результат, это уже разобрано до метода обратного вызова называется:

$.each(result.rates, function (i, object) { 
    console.log(i + "=" + object); 
}); 
1

программа показывает, как читать JSon и сохранять данные в текстовое поле

$(document).ready(function(){ 

$.getJSON("Test.json",function(data){ 

     $.each(data,function(key,value){ 
      alert(data[key].attrib1name); 
      alert(data[key].attrib2name); 
      $('input').val(data[key].enterpriseName); 
      activities=data[key].activities; 
      console.log(value); 
     }); 
    });  


}); 
Смежные вопросы