Как получить значения из Json с помощью Jquery

Привет, я новичок в Jquery и не знаю, как использовать данные json. У меня есть Json, который приходит в качестве ответа. Моя функция успеха

success: function(resp)
{
    var x = JSON.stringify(resp);
    alert(x);

}

оповещение имеет следующий JSON

{"xyz":{"abc":[{"action":"fail","result":"xxx"},{"action":"pass","resut":"yyy"}]}}

Мне нужна только ценность действия. Как я могу получить это значение из переменной x и как я могу использовать это значение в HTML. Заранее спасибо.


person Sau    schedule 18.04.2013    source источник


Ответы (3)


Когда вы используете JSON.stringify(), вы превращаете его в строку, вы хотите, чтобы он был объектом для доступа к данным. Попробуй это:

success: function(resp) {
    alert(resp.xyz.abc[0].action); 
    var x = resp.xyz.abc[0].action  // to use the value in html later on
}

Если он возвращается в виде строки (на данный момент я не могу сказать), вы можете превратить его в объект (при условии, что он является допустимым JSON), используя $.parseJSON()

person Andy    schedule 18.04.2013
comment
Моя функция успеха находится внутри ajax, поэтому я не получаю ожидаемого результата после указанного вами кода. ваш код правильный, но можете ли вы сказать мне, есть ли у меня этот успех в функции $.ajax, ваш код будет работать или нет, и если нет, есть ли другой способ - person Sau; 18.04.2013
comment
@Sau Вы пробовали отлаживать? Вы точно попадаете внутрь функции успеха? Что такое alerted? Попробуйте запустить console.log resp и посмотреть, что возвращается. - person Andy; 18.04.2013
comment
@Sau Это хорошо, это означает, что вы получаете объект. Попробуйте console.log зарегистрировать этот объект и посмотреть, что именно находится внутри него. В Chrome вы можете щелкнуть стрелку рядом с ним (в консоли), чтобы развернуть его и точно увидеть, что он содержит. - person Andy; 18.04.2013
comment
Я получаю что-то вроде объекта {xyz: Object}, если я расширяю это, я получаю xyz: Object при его расширении abc: array [2], расширение которого даст 0: Object 1: Object 2: Object и дальнейшее расширение этого объекта даст для 0: Object это даст результат: вы терпите неудачу и действие: неудача и так далее для других. - person Sau; 18.04.2013
comment
Он также дает некоторый proto:Object под 0:Object, и если я расширим этот proto:Object, это даст кучу вещей, которые являются функциями и могут быть расширены. . - person Sau; 18.04.2013
comment
@Sau Тогда это должно сработать ... что предупреждает, когда вы используете мой код выше? - person Andy; 18.04.2013
comment
Энди, спасибо за помощь, я действительно ценю, но что, если у меня есть xyz = xyz-kkk-ll-list и abc как xyz-kkk-ll, повлияет ли это на код - person Sau; 18.04.2013
comment
@Sau Можете ли вы объяснить, что вы имеете в виду, немного подробнее? - person Andy; 18.04.2013
comment
потому что он показывает мне Uncaught ReferenceError: kkk не определен - person Sau; 18.04.2013
comment
@Sau Какой код вы используете? kkk не является частью вашего объекта - person Andy; 18.04.2013
comment
уверен, что json, о котором я упоминал выше, я использовал xyz и abc, но на самом деле у меня есть json, например {xyz-kkk-ll-list:{xyz-kkk-ll:[{action:fail,result:xxx},{action:pass ,resut:yyy}]}} поэтому, когда я использую ваш код, он показывает ошибку в консоли Uncaught ReferenceError: kkk не определен - person Sau; 18.04.2013
comment
но когда я использую JSON.stringify(resp), он показывает весь json в предупреждении - person Sau; 18.04.2013
comment
@Sau О, верно. Это потому, что вы не можете использовать тире с точечной нотацией (например, var x = resp.xyz-kkk-ll-list.xyz-kkk-ll[0].action), вместо этого вам нужно использовать resp["xyz-kkk-ll-list"]["xyz-kkk-ll"][0].action - person Andy; 18.04.2013
comment
теперь я получаю сообщение об ошибке Uncaught TypeError: Cannot read property 'xyz-kkk-ll' of undefined - person Sau; 18.04.2013
comment
@Sau Можете ли вы сделать jsfiddle.net своей проблемы? Трудно устранять неполадки, не возясь с кодом самостоятельно. - person Andy; 18.04.2013

success: function(resp)
{
    var x = $.parseJSON(resp);
    var xyz = x.xyz;
    var pass = x.xyz.abc[1].action;
}

или вы можете зациклить каждый массив с помощью $.each

success: function(resp)
{
    var x = $.parseJSON(resp);
    $.each(x.xyz.abc, function(index, element){
        alert('action:' + element.action + ', result:' + element.resut)
    });
}
person Sen Jacob    schedule 18.04.2013
comment
У меня есть функция успеха в функции $.ajax, где я упомянул тип как GET, тип данных как JSON, а также имя пользователя и пароль для аутентификации, почему я не получаю ожидаемый результат, могу ли я использовать $.parseJSON внутри $.ajax метод, если да, то почему он не работает в моем случае. не могли бы вы направить меня дальше - person Sau; 18.04.2013

я думаю, и не принимайте это на свой счет, что ваш объект JSON плохо организован как объект, который можно получить и иметь. Действие, с моей точки зрения, либо провал, либо успех, и чтение его, как вы видели в приведенном выше хорошем ответе, даст вам именно то, что вы хотите.

Какой смысл получать JSON с данными, структурированными так, как вы, с закодированными в нем 2 возможными ответами, когда доступен только один (успешный или неудачный).

person Adrian Tanase    schedule 18.04.2013