Как разобрать объект json с помощью jquery

Я думаю, что это очень простой вопрос, но я потратил часы на поиск ответа, но безуспешно. У меня есть следующий объект json (сгенерированный с использованием play!Framework)

{
    "preg.pregunta": [{
        "message":"Debes escribir una pregunta",
        "key":"preg.pregunta",
        "variables":[]
    }],
    "preg":[{
        "message": "validation.object",
        "key":"preg",
        "variables":[]
    }]
}

Это мой фрагмент кода jquery

$.ajax({
    type: $target.attr('method'),
    data: dataString,
    url:$target.attr('action'),
    dataType: "json",
    beforeSend: function() {
        //some stuff
    },
    success:function(response){
        //some stuff
    },
    error: function(response){
        //I want to use the json response here.
    }
});

Я хочу получить все внутри preg.pregunta(значения messageи key)

Любая помощь?

ОБНОВЛЕНО: ну, у меня недостаточно репутации, чтобы ответить самому себе, это то, что я нашел до сих пор.

Хорошо, может быть, это было бы более чем очевидно, или я нужно еще немного изучить; я обнаружил, что jQuery неправильно анализирует ответ JSON, если он приходит вместе с ошибкой HTTP (в данном случае 400).

кто-то знает, почему такое поведение?

Я только что проверил это код в обработчике successи отлично работает !

$.ajax({
  type: $target.attr('method'),
  data: dataString,
  url:$target.attr('action'),
  dataType: "json",
  beforeSend: function() {
  },
  success:function(response){
    //It is working perfectly!
    $.each(response,function(object){ //first loop of the object
      $.each(response[object],function(values){ //looping inside arrays
        console.log(response[object][values].key) //getting value "key"
        console.log(response[object][values].message) //getting value "message"
      });
    })
  },
  error: function(response){
    //nothing happens here
  }
});

ОБНОВЛЕНО 2.

после двухчасового поиска я нашел простое решение:

error: function(response){
//Note the jQuery.parseJSON function
var response = jQuery.parseJSON(response.responseText);
  $.each(response,function(object){
    $.each(response[object],function(values){
      console.log(response[object][values].key)
      console.log(response[object][values].message)
    });
  })
}

Объяснение: при использовании обработчика ошибок jQuery возвращает сложный объект, описывающий ошибку, responseText содержит данные, полученные с сервера , поэтому вам нужно разобрать его с помощью функции parseJSON.

Надеюсь, это поможет!

6
задан Manuel Serrano 26 May 2012 в 22:36
поделиться