Общее представление о JSON

JSON (JavaScript Object Notation) означает запись объектов JavaScript. В литературе по JavaScript массивы определяются следующим образом:

var ajax = new Array( "Asynchronous", "JavaScript", "+", "XML" );

Однако существует и более компактный способ их записи с помощью квадратных скобок:

var ajax = [ "Asynchronous", "JavaScript", "+", "XML" ];

Это же относится и к объектам, которые в JavaScript представляют собой в какой-то степени массивы более высокого уровня. Но в данном случае для компактной записи объектов используются фигурные скобки. В следующем фрагменте кода определяется объект с тремя свойствами:

var book = {
    "title": "JavaScript Phrasebook",
    "publisher": "Sams Publishing",
    "pubdate": 2006
};

Оба вида сокращенной записи можно объединить вместе, чтобы представить сложные данные в виде строки. В этом, собственно, и заключается весь смысл JSON. Благодаря возможности компактно записывать данные в строке этот формат отлично подходит для преобразования данных в строку и обратно. Создать строковое представление данных в формате JSON на стороне сервера не представляет труда. А еще проще преобразовать строку из формата JSON в объект JavaScript на стороне клиента:

var json = XMLHttp.responseText;
var book = eval( "(" + json + ")" );

JSON постепенно становится стандартом форматом обмена данными для приложений AJAX. В версии PHP 6, скорее всего, появится поддержка JSON на базовом уровне.

Файл json.html

<script type="text/javascript">
var XMLHttp = getXMLHttp();
XMLHttp.open("GET", "json.php", true);
XMLHttp.onreadystatechange = handlerFunction;
XMLHttp.send(null);

function handlerFunction() {
  if (XMLHttp.readyState == 4) {
    var json = XMLHttp.responseText;
    var book = eval("(" + json + ")");
    var pubdate = book.pubdate;
    var title = book.title;
    var publisher = book.publisher;
    window.alert(title + " by " + publisher + " (" + pubdate + ")");
  }
}

function getXMLHttp() {
  if (window.XMLHttpRequest) {
    try {
      XMLHttp = new XMLHttpRequest();
    } catch (e) { }
  } else if (window.ActiveXObject) {
    try {
      XMLHttp = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
      try {
        XMLHttp = new ActiveXObject("Microsoft.XMLHTTP");
      } catch (e) { }
    }
  }
  return XMLHttp;
}
</script>

Файл json.php

<?php
$json = '{
  "title": "JavaScript Phrasebook",
  "publisher": "Sams Publishing",
  "pubdate": 2006
}'
;
echo $json;
?>

Пользоваться функцией eval() обычно не рекомендуется, поскольку это может серьезно нарушить безопасность системы, если данные в формате JSON поступают из ненадежного источника. В связи с тем что действие объекта XMLHTTPRequest ограничивается тем же доменом, где находится web-сервер, данным в формате JSON можно доверять. Но для большей надежности рекомендуется загрузить библиотеку json.js по адресу http://www.json.org/js и заменить вызов функции eval() следующей строкой кода:

var book = json.parseJSON();

Оставьте свой отзыв