Вход

Просмотр полной версии : Как достать данные из JSON массива?


Dimaz
27.11.2012, 18:54
Всем привет. Подскажите как можно достать данные из json массива. Формирую его на сервере следующим образом:
$m_query = mysql_query("SELECT * FROM `tests` WHERE `test_id` = '". $test_id ."'");
while($row = mysql_fetch_array($m_query, MYSQL_ASSOC)) {
$arr[] = array('id' => $row['test_id'], 'questions' => $row['questions'], 'answers' => $row['answers']);
}
echo json_encode($arr);
Клиенту приходит json такого вида:
[{"test_id": "1", "questions": "How are you:", "answers": "ok"}, {"test_id": "1", "questions": "How old are you:", "answers": "22"}]
Пытаюсь вывести так:
$.post('save_data.php', {drink: drink},
function(data){
var questions = data.questions;
var answers = data.answers;
$('#feeds').html(questions);
}, "json");

Но ничего не выводится. Как можно достать значение ключа "questions", содержащегося в json массиве?

Amphiluke
27.11.2012, 19:34
var questions = data.questions;
Видимо,
var questions = data[i].questions;
где i — целочисленный индекс (0, 1)

vadim5june
27.11.2012, 19:38
var d=JSON.parse();//,???
var questions = d[0].questions;
....

Dimaz
27.11.2012, 19:48
Все равно ничего не получается:
$(document).ready(function(){
$('form input:image').click(function() {
var drink = $('input[name=drink]:checked').val();
$.post('save_data.php', {drink: drink},
function(data){
var questions = data.questions;
var answers = data.answers.split(',');
var enter_to = '';
for ( var i=0, l=questions.length; i<l; i++) {
enter_to = "<b>Вопрос 1</b><Br>" + "<b>" + questions[i] + "</b><Br>";
for (var i2=0, l2=answers.length; i2<l2; i2++) {
enter_to += "<b>" + answers[i2] + "</b><Br>";
}
$('#feeds').html(enter_to);
}
}, "json");
return false;
});
});
Использую метод split, так как в последнем поле БД значения перечислены через запятую. Я хочу добиться того, чтобы в браузер выводился первый вопрос, потом варианты ответов, потом второй вопрос и опять варианты.

Dimaz
27.11.2012, 19:51
В базе данных 3 поля: "test_id", "questions" и "answers", а также 2 строки. В каждой строке по одному вопросу и варианты ответов через запятую.

Amphiluke
27.11.2012, 19:57
data.questions
Откуда вы вообще это берете?


Если
Клиенту приходит json такого вида:
[{"test_id": "1", "questions": "How are you:", "answers": "ok"}, {"test_id": "1", "questions": "How old are you:", "answers": "22"}]
то
data.questions == undefined.

Цикл нужно организовывать по массиву data непосредственно

Dimaz
27.11.2012, 20:04
Если б я знал как это сделать)

Dimaz
27.11.2012, 20:12
Сделал так:
$(document).ready(function(){
$('form input:image').click(function() {
var drink = $('input[name=drink]:checked').val();
$.post('save_data.php', {drink: drink},
function(data){
for (var i in data) {
var row = data[i];

$('#feeds').html('<b>' + row.questions + '</b>');
}
}, "json");
return false;
});
});
Но он почему то выводит только один вопрос, который находится во второй строке БД. А тот что в первой строке не выводит. Нужно чтоб оба вывел. Как сделать подскажите.

vadim5june
27.11.2012, 20:20
var row='';
for (var i in data) {
var row+ = '<br><b>'+data[i].questions+'</b>';};
$('#feeds').html(row);

Dimaz
27.11.2012, 20:32
Спасибо большое! А то я мучился целый день. Только немножко подправить надо:
var row='';
for (var i in data) {
row+ = '<br><b>'+data[i].questions+'</b>';
$('#feeds').html(row);

Второй раз переменную row объявили.:)

vadim5june
27.11.2012, 20:36
Второй раз переменную row объявили
Да поправьте

Dimaz
27.11.2012, 20:52
Пытаюсь разделить строку методом split(','). В ней через запятую перечислены варианты ответов:
var row = '';
for (var i in data) {
row += '<b>' + data[i].questions + '</b><Br>';
row += '<b>' + data[i].answers[i].split(',') + '</b><Br>';
}
$('#feeds').html(row);
Выводит вопрос, первая буква первого ответа(1-ой строки), вопрос, вторая буква первого ответа(2-ой строки). Что делать?:(

vadim5june
27.11.2012, 21:34
А так что выводит?

var row = '';
for (var i in data) {
row += '<b>' + data[i].questions + '</b><Br>';
row += '<b>' + data[i].answers+ '</b><Br>';
}
$('#feeds').html(row);

Dimaz
27.11.2012, 21:44
Какое пиво вам больше нравится:
Zlaty Bazant, Балтика 3, Heineken
Какой чай вы обычно пьете:
Чёрный, Зеленый
А мне нужно, чтобы каждый ответ выводил в отдельный элемент страницы. Поэтому и пытаюсь разделить эти строки на элементы массива методом split(','). Мне нужно так:
Какое пиво вам больше нравится:
Zlaty Bazant
Балтика 3
Heineken
Какой чай вы обычно пьете:
Чёрный
Зеленый

vadim5june
27.11.2012, 21:49
var row = '';
for (var i in data) {
row += '<b>' + data[i].questions + '</b><Br>';
var ss=data[i].answers.split(',');
for(var y=0;y<ss.length;y++)
row += '<b>' + ss[y]+ '</b><Br>';
}
$('#feeds').html(row);

Dimaz
27.11.2012, 21:58
Спасибо:) Теперь все работает как надо.