Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   JSON или XML (https://javascript.ru/forum/misc/9532-json-ili-xml.html)

mycoding 22.05.2010 15:24

JSON или XML
 
Что лучше JSON или XML?

Gozar 22.05.2010 16:22

Кто круче Терминатор или Рэмбо?

mycoding, не забывайте ставить знаки вопроса, а то не понятно вопрос это или утверждение.

micscr 22.05.2010 16:24

Конечно терминатор.

mycoding 22.05.2010 16:41

:)
Просто мне нравится JSON, а вот у друзей на работе
заставляют пользоваться xml.

Gozar 22.05.2010 17:33

http://javascript.ru/forum/misc/4664...-php-v-js.html

Shaci 22.05.2010 19:28

Арни круче всех!)

Kolyaj 22.05.2010 20:35

Цитата:

Сообщение от mycoding
Что лучше JSON или XML?

JSON.

micscr 23.05.2010 08:23

тоже JSON в основном последнее время использую. Но с ним есть и свои маленькие неудобности: например в строковых значениях должны отсутствовать символы перевода строк (из-за синтаксиса js) - т.е. дополнительно обрабатывать перед отправкой.

Gozar 23.05.2010 09:46

Цитата:

Сообщение от micscr (Сообщение 56187)
в строковых значениях должны отсутствовать символы перевода строк

не отсутствовать, а экранироваться и не только перевода строк.

Цитата:

Сообщение от micscr (Сообщение 56187)
тоже JSON в основном последнее время использую. Но с ним есть и свои маленькие неудобности

xml формировать и разбирать затем не надо?

micscr 23.05.2010 10:31

Цитата:

Сообщение от Gozar (Сообщение 56189)
не отсутствовать, а экранироваться и не только перевода строк.

Суть не меняется - переделывать в js надо
var x = 'fff\
dffdf\
ffdfddf ';
var y = 'fff' + '\n' + 'dffdf' + '\n' + 'ffdfddf ';
alert(x == y);


Цитата:

Сообщение от Gozar (Сообщение 56189)
xml формировать и разбирать затем не надо?

конечно надо, в js шары вообще нет :) .

Просто смотрю как по мне - если подгружать именно данные которые будут дообрабатываться еще - то удобнее json.
А если надо просто куски html подгружать - xml.

Gozar 23.05.2010 12:11

Цитата:

Сообщение от micscr (Сообщение 56192)
Суть не меняется - переделывать в js надо
var x = 'fff\
dffdf\
ffdfddf ';
var y = 'fff' + '\n' + 'dffdf' + '\n' + 'ffdfddf ';
alert(x == y);

суть разная, отсутствовать ≠ экранировать. Пример этот вообще к чему?
var x = 'fff\
dffdf\
ffdfddf ';
var y = 'fff' + '\n' + 'dffdf' + '\n' + 'ffdfddf ';
alert([x,y]);

Цитата:

Сообщение от micscr (Сообщение 56192)
А если надо просто куски html подгружать - xml.

а ещё проще html

Kolyaj 23.05.2010 13:22

Цитата:

Сообщение от micscr
например в строковых значениях должны отсутствовать символы перевода строк

Чё за бред? Если у вас есть строка JSON, то там нет переводов строк (не экранированных), если там есть переводы строк -- это не JSON. Также можно сказать, что у XML есть свои трудности, например, & надо экранировать.

micscr 23.05.2010 15:06

Может мы о разном говорим?
Имею обработчик ajax-запроса:
$str = "Каждая
в своей
строке";
if (isset($_POST['how'])) {
	$how = $_POST['how'];
	if ($how == 'json') {
          // передаю json - экранирую
	  echo 'var x = "' . str_replace("\r\n" , "\\\r\n" , $str) . '";';
	} else {
          // передаю html
          echo '<div>' . $str . '</div>';
    }
}


В textarea мне надо получить этот текст (состоящий из 3-х строк)

Вот запрос на html:
function whatdo()
{
    // действия
  $.post('./listener.php' , {how : 'html'}, function(data){
	var txt = $(data).text();
	$('textarea').val(txt); // получим как в php было - три строки
  });
}

- все ОК.

Вот запрос на json:
function whatdo2()
{
    // действия
  $.post('./listener.php' , {how : 'json'}, function(data){
	try {
	  eval(data);
	  $('textarea').val(x); // получим все в одну строку
	} catch(e) {
	  alert('ошибка');
	} 

  });
}

- отрабатывает без ошибки, но результат в textarea - одна слитая строка, а не три. Т.е. по простому сделать(как вариант 1.) не выходит. Или что делаю не так?

Kolyaj 23.05.2010 16:45

Цитата:

Сообщение от micscr
07 // передаю json - экранирую
08 echo 'var x = "' . str_replace("\r\n" , "\\\r\n" , $str) . '";';

Это не json. Вот json
json_encode($str);
А вы просто слэши в конце каждой строки поставили.

micscr 23.05.2010 17:23

спс, буду знать.

B~Vladi 24.05.2010 01:47

Если использование XSLT упростит задачу, то конечно лучше XML, например подгрузка дерева. В общем всё от ситуации зависит.

mycoding 28.05.2010 22:20

Пробовал загружать данные в json с сайта, они приходят в виде строки.
Сделал myjson = eval(json);
Выдаёт :
Ошибка: invalid label
Исходный код:
{subject:"tfkp",title:"Сборник задач по теории функции комплексного переменного",author:"Волковынс кий, Лунц, Араманович",yearOfPublish:"2006"}

JSON :
{subject:"tfkp",title:"Сборник задач по теории функции комплексного переменного",author:"Волковынс кий, Лунц, Араманович",yearOfPublish:"2006"}

Пробовал и myjson = eval('('+json+')');

Просто я первый раз json загружаю с сайта, раньше html уже готовый загружал.
А теперь появилась необходимость в JSON и что-то не разбирусь.
НУ вроде получилось запустить myjson = eval('('+json+')');
НО как теперь к свойствам обратится ? ЧТо то
myjson.title не работает.

Octane 28.05.2010 22:32

Цитата:

Сообщение от mycoding
Пробовал и myjson = eval('('+json+')');

Ну и все работает:
alert(eval('({subject:"tfkp",title:"Сборник задач по теории функции комплексного еременного",author:"Волковынс кий, Лунц, Араманович",yearOfPublish:"2006"})').subject);


Цитата:

Сообщение от mycoding
JSON :
{subject:"tfkp",title:"Сборник задач по теории функции комплексного переменного",author:"Волковынс кий, Лунц, Араманович",yearOfPublish:"2006"}

Это не JSON. Вот JSON:
alert(JSON.stringify({subject:"tfkp",title:"Сборник задач по теории функции комплексного переменного",author:"Волковынс кий, Лунц, Араманович",yearOfPublish:"2006"}));


И в современных браузерах есть специальный метод JSON.parse:
alert(JSON.parse('{"subject":"tfkp","title":"Сборник задач по теории функции комплексного переменного","author":"Волковынс кий, Лунц, Араманович","yearOfPublish":"2006"}').subject);

mycoding 28.05.2010 22:36

Всё заработало, огромное спасибо.

B~Vladi 28.05.2010 23:52

Цитата:

Сообщение от Kolyaj
Чё за бред?

Это не бред.
Цитата:

Сообщение от Kolyaj
то там нет переводов строк (не экранированных)

Бред.
Цитата:

Сообщение от Kolyaj
если там есть переводы строк -- это не JSON

Да, но опять же если на клиент всё поступает в виде JSON - как быть? "\n" не помогают.

Kolyaj 29.05.2010 08:09

B~Vladi,
http://json.org/ вот грамматика JSON. Где там перевод строки? Не путать escape-последовательность \n с переводом строки.

Цитата:

Сообщение от B~Vladi
Да, но опять же если на клиент всё поступает в виде JSON - как быть? "\n" не помогают.

Не понял.

micscr 29.05.2010 09:43

Цитата:

Сообщение от B~Vladi (Сообщение 56926)
Да, но опять же если на клиент всё поступает в виде JSON - как быть? "\n" не помогают.

Вот эта функция json_encode кириллицу представляет utf-кодами, а символы перевода строк заменяет их строковыми эквивалентами, которые при eval станут в js переводом строки. Т.е. что то типа:
var dd = '\u0410' + '\\' + 'r' + '\\' + 'n' + '\u042f'; // вот такое получили от сервера
alert(dd);
var str = 'dd1 = "' + dd + '"';
eval(str);
alert(dd1); // наш результат

mycoding 12.06.2010 12:28

Сейчас пытаюсь загрузить данные из mysql, а потом перевести их в json.
Вот код
if(isset($_POST['subject'])){
	$subject=$_POST['subject'];
	include '../config.php';
	$link = mysql_connect($host, $mysql_user, $mysql_password) or die("Could not connect: " . mysql_error());
	mysql_select_db($database, $link) or die ('Can\'t use $database : ' . mysql_error());
	$sql="SELECT * FROM `subjects` where `subjectShort`='$subject'";
	if(!$rs = mysql_query($sql)){
		$answer='[{success:false}]';
	}else{
	    $row=mysql_fetch_array($rs);
			$rs = mysql_query($sql);
			$arr=array();			
			while($obj=mysql_fetch_object($rs)){
				$arr[]=$obj;				
			}										
			$answer = json_encode($arr);
	}
	echo $answer;
	//echo "[{subjectShort:'matan',subjectFull:'Математический анализ',namesBooks:['Демидович','Тест1']}]";
}
?>


ПОчему то приходит только одна одно значение, т.е. в $arr все есть, а строка json_encode($arr); возвращает только [{"subjectShort":"matan","subjectFull":null,"namesB ooks":null}]

B@rmaley.e><e 12.06.2010 13:06

Цитата:

Сообщение от mycoding
sql="SELECT * FROM `subjects` where `subjectShort`='$subject'";
    if(!$rs = mysql_query($sql)){
        $answer='[{success:false}]';
    }else{
        $row=mysql_fetch_array($rs);
            $rs = mysql_query($sql);

Это что за бред?

micscr 13.06.2010 15:17

mycoding, погляди тут как доставать данные из таблички mysql.


Часовой пояс GMT +3, время: 03:16.