странная ошибка парсинга JSON строки

Arramis

Новичок
Всем привет, проблема такая : вытаскиваю данные из бд :
PHP:
    $data = array();

	$query_dialogs = $db_link -> query("SELECT `sentence_en`,`sentence_arm` FROM `dialogs`
										WHERE `dialog_number` = 'N001' ORDER BY `id`");

	while ($sentence = $query_dialogs -> fetch_assoc()) {
		$data[] = $sentence;
	}

	echo $data = preg_replace("#[\[\]]#", "", json_encode($data));   // удаляю квадратные скобки чтобы JSON строка была валидной
// перед пребразовывание в JSON строку print_r($data); показывает такой массив:
Array
(
[0] => Array
(
[sentence_en] => data1
[sentence_arm] => data2
)

[1] => Array
(
[sentence_en] => data3
[sentence_arm] => data4
)
...
)
// после преобразования (получаем такую JSON строку:
{"sentence_en":"data1.","sentence_arm":"data2"},{"sentence_en":data3","sentence_arm":"data4"}, ...

далее делаю ajax запрос на получение этих данных в .js файле (чистый javascript):

dialogs_request.onreadystatechange = function () {
if (http_request.readyState == 4)
element.innerHTML = dialogs_request.statusText;

var response = http_request.responseText;
var data = JSON.parse(response); // здесь выдаётся ошибка
alert(data.sentence_en);
for (var i in data) {
alert(data[\i]);
}
}
получаю две ошибки на строке var data = JSON.parse(response);
1)SyntaxError: JSON.parse: unexpected end of data

2)SyntaxError: JSON.parse: unexpected non-whitespace character after JSON data

когда я вытаскивал только одну строку из таблицы бд - всё нормально парсилось джаваскриптом, тоесть
получается что в JSON строке не может быть ключей с одинаковыми названиями ?? тогда какое будет решение когда массив из бд выходит многомерный где имя колонки в таблице есть ключ этого ассоциативного массива ?? (
 

keltanas

marty cats
Arramis
А что тебе дало основание полагать, что json_encode дает невалидный json?
 

keltanas

marty cats
Приведи, пожалуйста, вывод из
PHP:
var response = http_request.responseText;
console.log(response)
 
  • Like
Реакции: WMix

WMix

герр M:)ller
Партнер клуба
PHP:
JSONObject = eval( "(" + http_request.responseText + ")" );
 

Arramis

Новичок
А зачем ты их вырезал?
ну я тупо следовал работающему примеру найденному из инета а именно :

var json = '{"result":"srting1212","count":"1sdsdsd/"}';
var obj = JSON.parse(json);
alert(obj.count); // 1sdsdsd

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

WMix

герр M:)ller
Партнер клуба
PHP:
var json = '[1,2,3,4]';
var obj = JSON.parse(json);
alert(obj[0]); // 1
а тут никаких фигурных, магия?
 

Arramis

Новичок
Arramis
У тебя другой пример. Почитай, пожалуйста про массивы.

WMix
))
кстати вот это var response = http_request.responseText;
console.log(response) в консоли выдаёт нормально строку, короче мне походу надо нормально прочитать её )) пойду читать твою ссылку ))
Click to expand...
 

WMix

герр M:)ller
Партнер клуба
PHP:
alert( Array.isArray([1,2,3,4]) ? 'Array' : 'найн, дас ист кайн аррай абер дас ист фантастиш' )
не убедил!
 

WMix

герр M:)ller
Партнер клуба
в js нет классов и даже {a:'b'} это ассоциативный массив.
 
Последнее редактирование:
Сверху