Значение имени людей скачать файл json. Открываем файлы JSON. Сравнение JSON и XML

JSON (JavaScript Object Notation) - простой формат обмена данными, удобный для чтения и написания как человеком, так и компьютером. Он основан на подмножестве языка программирования JavaScript , определенного в стандарте ECMA-262 3rd Edition - December 1999 . JSON - текстовый формат, полностью независимый от языка реализации, но он использует соглашения, знакомые программистам C-подобных языков, таких как C, C++, C#, Java, JavaScript, Perl, Python и многих других. Эти свойства делают JSON идеальным языком обмена данными.

JSON основан на двух структурах данных:

  • Коллекция пар ключ/значение. В разных языках, эта концепция реализована как объект , запись, структура, словарь, хэш, именованный список или ассоциативный массив.
  • Упорядоченный список значений. В большинстве языков это реализовано как массив , вектор, список или последовательность.

Это универсальные структуры данных. Почти все современные языки программирования поддерживают их в какой-либо форме. Логично предположить, что формат данных, независимый от языка программирования, должен быть основан на этих структурах.

В нотации JSON это выглядит так:

Объект - неупорядоченный набор пар ключ/значение. Объект начинается с { открывающей фигурной скобки и заканчивается } закрывающей фигурной скобкой. Каждое имя сопровождается: двоеточием, пары ключ/значение разделяются, запятой.

Массив - упорядоченная коллекция значений. Массив начинается с [ открывающей квадратной скобки и заканчивается ] закрывающей квадратной скобкой. Значения разделены, запятой.


Значение может быть строкой в двойных кавычках, числом , true , false , null , объектом или массивом . Эти структуры могут быть вложенными.


Строка - коллекция нуля или больше символов Unicode, заключенная в двойные кавычки, используя \ обратную косую черту в качестве символа экранирования. Символ представляется как односимвольная строка. Похожий синтаксис используется в C и Java.


Число представляется так же, как в C или Java, кроме того, что используется толко десятичная система счисления.


Пробелы могут использоваться между любыми лексемами.

Исключая некоторые детали кодирования, вышеизложенное полностью описывает язык.


JSON (JavaScript Object Notation, объектная нотация JavaScript) – формат представления структурированных данных, используемый для передачи данных через Интернет.

По сути формат JSON представляет собою обычную строку.

Синтаксис JSON

Синтаксис JSON достаточно мал, он включает в себя только описание того, как выглядят передаваемые данные.

Типы данных JSON

В JSON типы данных можно разделить на две категории: простые и сложные.

  • string – текстовые строки (обычно их называют просто – строки)
  • number – числа
  • boolean – логические (булевы) значения
  • null

К сложным типам относятся:

  • object – объекты
  • array – массивы

Синтаксис JSON заимствован из JavaScript, поэтому для представления значений простых и сложных типов используется тот же синтаксис, что и в JavaScript.

Простые значения

Простейший пример JSON-кода – любое значение простого типа:

5 2.3 "Hello!" true null

В JSON строки должны быть заключены только в двойные кавычки. Использование одинарных кавычек приводит к синтаксической ошибке.

Объекты

Объект JSON представляет собой заключённый в фигурные скобки список из нуля или более свойств (пар "имя": значение), разделённых запятыми. Имена свойств объектов обязательно должны быть заключены в двойные кавычки. Отсутствие двойных кавычек или использование одинарных кавычек в имени свойства является ошибкой. Свойства могут содержать значения любого типа (простого или сложного):

{ "name": "Гомэр", "age": 40, "work": { "place": "Атомная станция", "location": "Спрингфилд" } }

Массивы

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

[ { "name": "Гомэр", "age": 40, "work": { "place": "Атомная станция", "location": "Спрингфилд" }, "children": [ "Барт", "Лиза", "Мэги" ] }, { "name": "Мардж", "age": 37, "work": { "place": "Дом", "location": "Спрингфилд" }, "children": [ "Барт", "Лиза", "Мэги" ] } ]

JSON - это текстовый формат записи данных. Он позволяет в текстовом виде представить как отдельное число или строку, так и сложные структуры, например, массивы с данными. Использование этого формата записи удобно тем, что он читабелен и интуитивно понятен, в то же время позволяет сохранять очень сложные структуры данных. Кроме того, он более компактный, чем xml, поэтому на мой взгляд более предпочтителен для обмена данными между веб-браузером и сервером.

Синтаксис JSON на примерах

Формат json обычно записывается в 2-х вариантах:

1. Последовательность значений. Например, последовательность 10, 15 и "test" в формате JSON будут выглядеть так:

2. Запись в виде пар ключ: значение . Например:

{"ФИО":"Иванов Сергей", "Дата рождения":"09.03.1975"}

Немного более сложный пример:

{ "ФИО" : "Иванов Сергей", "Адрес" : { "Город" : "Москва", "Улица" : "Пятницкая", "Дом" : "35" } }

PHP функции для работы с JSON-форматом

В языке php начиная с версии 5.2. есть всего 4 функции:

  • json_decode - Декодирует строку JSON (из строки json-формата получает данные)
  • json_encode - Возвращает JSON-представление данных (преобразует данные в json-строку)
  • json_last_error_msg - Возвращает строку с сообщением об ошибке последнего вызова json_encode() или json_decode()
  • json_last_error - Возвращает последнюю ошибку

В основном по-большей части, используются всего две функции: json_encode и json_decode . Не буду вдаваться в подробности их синтаксиса, подробнее можете посмотреть на php.net . Пример использования:

$arr1 = array(0,1,2); $json_str = json_encode($arr1); echo $json_str; // выведет json-строку: $arr2 = json_decode($json_str); echo $arr2; // выведет: 1

Обратите внимание : при кодировании в JSON-формат данных на русском языке , функция json_encode преобразует русские символы в юникод , т.е. заменяет их на \uXXXX и таким образом, json-строка становится не читабельной для человека (но понятной для браузера). Если нужно, чтобы преобразования в юникод не происходило (например, при отладке кода), можно просто использовать опцию JSON_UNESCAPED_UNICODE.

Так же, чтобы при кодировании не добавлялись слэши для экранирования и чтобы строки с числами кодировались как числа, можно использовать JSON_UNESCAPED_SLASHES и JSON_NUMERIC_CHECK. В итоге, чтобы json-строка была читабельной для человека, сделаем, например, так:

$arr = array("fio" => "Иванов Сергей", "age" => "32", "vk_url" => "https://vk.com/id11111"); echo json_encode($arr, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_NUMERIC_CHECK);

Без использования этих опций строка была бы такой:

{ "fio" : "\u0418\u0432\u0430\u043d\u043e\u0432 \u0421\u0435\u0440\u0433\u0435\u0439", "age" : "32", "vk_url":"https:\/\/vk.com\/id11111" }

а с использованием опций, получим читабельную строку:

{ "fio" : "Иванов Сергей", "age" : 32, "vk_url" : "https://vk.com/id11111" }

Еще один момент: если нужно чтобы при декодировании json-строки функция json_decode возвращала именно массив , просто добавьте второй параметр в функцию равный true.

$json_str = "{ "a":1, "b":2, "c":3 }"; $obj = json_decode($json_str); // получим объект echo $obj->a; // выведет 1 $arr = json_decode($json_str, true); // получим ассоциативный массив echo $arr["a"]; // выведет 1

На этом рассмотрение php-функций завершу.

JavaScript функции для работы с JSON-форматом

Начнем с того, что JSON-формат, изначально был придуман для языка JavaScript и потом стал просто отдельным текстовым форматом, используемым в разных языках. Видимо, поэтому синтаксис JSON очень похож на синтаксис записи обычных объектов и массивов.

// Пример массива в JavaScript arr = ; alert(arr); // выведет 1 // Пример объекта в JavaScript obj = { "name": "Вася", "age": 35, "isAdmin": false } alert(obj.name); // выведет "Вася"

Функции JavaScript, используемые для преобразования в JSON-формат и обратно:

  • JSON.parse - декодирование JSON-строки (преобразование строки в объекты и/или массивы)
  • JSON.stringify - возвращает JSON-представление данных (преобразование объектов и/или массивов в json-строку)

Простой пример декодирования json-строки в массив с цифрами:

Str = ""; arr = JSON.parse(str); alert(arr); // выведет 1

Пример преобразования (сериализации) объекта в JSON-строку:

Obj = { "name": "Вася", "age": 35, "isAdmin": false } alert(JSON.stringify(obj)); // выведет {"name":"Вася","age":35,"isAdmin":false}

При сериализации (преобразовании) объекта в JSON-строку, вызывается метод toJSON этого объекта, если он существует. Если метода нет, тогда перечисляются все свойства объекта. Пример преобразования объекта с методом toJSON:

Obj = { "name": "Вася", "age": 35, "isAdmin": false, toJSON: function() { return this.age; } } alert(JSON.stringify(obj)); // выведет 35

Примеры практического применения JSON-формата

Собственно, лично я, применяю формат JSON в 2-х основных ситуациях:

1. Передача данных между браузером и сервером с использованием Ajax-запросов.

Например, у нас есть какая-то страница, на которой нужно обновить данные без перезагрузки страницы. Допустим, нужно чтобы с сервера "подгрузилась" информация со списком сотрудников и их данными.

В JavaScript с помощью jQuery делаем простой и выводим данные в виде таблицы в браузер:

$.getJSON("get-info.php").success(function(data) { // ajax-запрос, данные с сервера запишутся в переменную data htmlstr = "

"; for (var i=0; i "Иванов Сергей", "birthday" => "09.03.1975"); $user_info = array ("fio" => "Петров Алексей", "birthday" => "18.09.1983"); echo json_encode($user_info); exit;

В этом примере JSON-строка, которая была передана с сервера в браузер была такой:

[{"fio":"Иванов Сергей","birthday":"09.03.1975"},{"fio":"Петров Алексей","birthday":"18.09.1983"}]

Я специально не стал показывать строку в виде "дерева", т.к. она передается именно в таком виде. И как вы можете оценить, запись данных в формате JSON получилась очень компактной , а это значит, что передача этих данных от сервера к браузеру будет практически мгновенной.

2. Запись сложных структур данных в базу данных.

Иногда бывают ситуации, когда заводить еще одну таблицу в базе данных не целесообразно, чтобы сохранить различные данные. Допустим, предположим, у зарегистрированного на сайте пользователя есть возможность сделать настройку цвета фона и цвета текста.

Вместо того, чтобы заводить еще одну таблицу ради 2-х настроек, можно просто в таблице со списком пользователей сделать текстовый столбец, в который помещать данные настроек пользователя. Тогда запрос обновления настроек, может например, быть таким:

UPDATE users SET settings = "{"background-color":"#FFFFFF", "text-color":"#000000"}" WHERE user_id = 10

В будущем, получив из таблицы users информацию, скрипт php может легко превратить их обратно в массив с настройками. Например, если переменная $user_info содержит данные, полученные по пользователю из таблицы users, получить массив с настройками очень просто:

$settings = json_decode($user_info["settings"], true); echo "Цвет фона = ".$settings["background-color"]; echo "Цвет текста = ".$settings["text-color"];

В формате JSON, можно так же, например, записать в базу данных какие опции товаров выбрал покупатель.

{"15":["45","47"], "18":"52"} // у опции 15 выбраны значения 45 и 47, а у опции 18 выбрано значение 52

Впринципе, можно даже и всё содержимое корзины записать в формате JSON, например, так:

{ "user_id" : 10, "session_id" : "2c2l3h4ii271aojentejtdcmh3", "products": [ { "product_id" : 15, "options" : { "15" : , "18" : 52 }, "quantity" : 1, "price" : 1500 }, { "product_id" : 16, "options" : { "15" : , "18" : 51 }, "quantity" : 2, "price" : 1000 } ] }

В обычном не древовидном виде эта JSON-строка будет такой:

{"user_id":10,"session_id":"2c2l3h4ii271aojentejtdcmh3","products":[{"product_id":15,"options":{"15":,"18":52},"quantity":1,"price":1500},{"product_id":16,"options":{"15":,"18":51},"quantity":2,"price":1000}]}

Таким образом, как видно из примеров, в формате JSON можно хранить и передавать практически любую информацию.

Переменные, массивы и объекты - привычная и удобная форма представления данных. Описывать данные принято в языке браузера JavaScript, что делать не обязательно в языке сервера PHP. Формат JSON позволяет обобщить их в одно целое и не делать акцент на языке программирования. При этом данные превращаются в пары: "имя = значение". Значение в каждой из них также может быть совокупностью таких пар.

Принято JSON ассоциировать с фигурными скобками и Последнее вполне обосновано, так как формат JSON = Object Notation JavaScript. В последние особенно динамичные годы многое изменилось. Что создавалось ради конкретной цели, часто приносило неожиданные плоды или открывало новые горизонты.

Обмен данными: браузер - сервер

Технология AJAX стала традиционной, обычное обновление страницы целиком перестало пользоваться популярностью. Посетитель, открывая сайт, инициирует серию частичных обменов данными, когда те или иные страницы меняются только в том месте, которое актуально.

Считается, что появление JSON связано с использованием именно AJAX, но на самом деле ассоциативные и его объектная нотация (особенности синтаксиса описания и использования объектов) имеют гораздо более родственное отношение к JSON, чем обмен данными между браузером и сервером.

Так как контент страниц современных сайтов действительно стал «массивным» (объемным), то и эффективность формата для обмена данными приобрела особое значение. Нельзя сказать, что JSON стал новым представлением данных, но то что он давно был элементом синтаксиса JavaScript, имеет существенное значение.

Использование кириллицы в именовании переменных - очень неожиданное явление (нонсенс), но это работает в последних версиях Chrome, Firefox и, даже, в Internet Explorer 11.

Кириллица и JSON

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

Сомнительно, что инициативу в кириллических именах поддержит внешнее окружение браузера, с которым ему постоянно приходится иметь дело. Но этот факт заслуживает внимания по той простой причине, что JSON формат - это возможность писать имена и значения так, как угодно разработчику. Это принципиально, поскольку в каждой задаче описание области применения так, как она этого требует, существенно упрощает отладку и уменьшает количество ошибок.

Не важно, какое именно имело под собой основание синтаксическое новшество - JSON, важно, что оно дало законное право и реальную возможность поставить соответствие: "любое имя = любое значение".

Надо отдать должное языку JavaScript: то, что предусмотрено синтаксисом, не обязывает разработчика и ничего ему не навязывает. Разработчик свободно использует синтаксис языка для оптимального формирования модели данных и алгоритма их использования.

PHP и JSON

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

  • $cJSON = array ("a"=> "alfa", "b"=> "beta", "g"=> "gamma").

Преобразование в формат JSON для передачи в браузер:

  • $cJS = json_encode($cJSON ).

Результат:

  • {"a":"alfa","b":"beta","g":"gamma"}.

Допускается изображенная на фото вложенность.

Здесь сформированный массив был добавлен новым элементом «сам в себя» с автоматическим индексом "0", а затем еще раз с указанным индексом "z".

Json_decode() выполняет преобразование строки JSON в массив PHP. Аналогичных результатов можно добиться, манипулируя функциями и explode(). В некоторых случаях этот вариант предпочтительнее.

Уровень вложенности

Элементы могут быть вложены друг в друга как на стороне браузера, так и на стороне сервера. На практике формат JSON (описание стандарта RFC 4627) предоставляет значительно более 4 уровней вложенности, но не следует злоупотреблять этой возможностью.

Лучше всего никогда не выходить за пределы разумной достаточности, это делает код читабельным, упрощает его отладку и понимание другими разработчиками.

JSON принято относить к конструкциям данных, которые проще XML, понятны одновременно и людям, и компьютерам. Это действительно так, когда объем данных мал, а уровень вложенности разработчик выбрал грамотно. Во всех остальных случаях считать количество скобок и понимать сложно как на стороне браузера, так и на стороне сервера.

Файлы JSON

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

Штат предприятия и JSON-формат: пример

Обычно запись об одном человеке - это фамилия, имя, отчество, год рождения, специальность, образование, ... и несколько еще простеньких значений. Даже в особо требовательных компаниях запись об одном человеке не будет превышать десятка-двух полей. Это доступно восприятию и может быть помещено в строку базы данных.

Если в компании работает несколько человек - это одно, но если десятки тысяч - это совсем другое. Можно продолжать использовать базу данных, но хранение ее в виде файла выглядит практичнее и доступнее для использования.

JSON - это обычный текстовый файл. Случай со штатным расписанием, куда ни шло. Прочитать его всегда можно. Открыть и изменить также доступно в любом текстовом редакторе, который не имеет привычки добавлять свою служебную информацию в содержание файла. Вообще, *.json - это чистый текст как внутри браузера, так и внутри файла - строка.

На фото представлен кэш объекта, формирующего картинку, пример.

Это пример содержания файла, сформированного сайтом, предоставляющим услугу цветной объемной печати на кружках и керамических изделиях. Естественно, решить, имея такой JSON-формат, чем открыть его, действительно проблематично. Однако в этом и подобных случаях проблем с чтением файла не возникает: PHP читает файл, разбирает его и передает в браузер. Изменённые посетителем данные возвращаются на сервер и записываются обратно.

В таком варианте использования файл выступает как переменная, которая хранится вне кода. При необходимости, переменная получает значение из файла, а если она будет изменена посетителем в диалоге, предусмотренном сайтом, то все изменения запишутся как есть. Нет необходимости читать и проверять содержимое файла.

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

XML и JSON

"Всему свое время" - классическое знание, принятое за аксиому еще до появления программирования. "Ни что не появляется просто так", - это тоже было до того, как человек написал первую вразумительную программу на искусственном языке.

Форматы данных появляются от реальной потребности и основываются на достигнутых знаниях. У HTML - своя стезя, у XML - своя дорога, а JSON - это объектная логика JavaScript, расширенная на другие языки. Сравнивать одно с другим не лучшее занятие. Каждому свое.

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

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

Спецсимволы («`», «~», «|», ...) и форматы данных

Привычка работать с ассоциативными массивами и объектами на JavaScript делает использование JSON естественным и удобным. Это действительно отличный формат, но умение разделять и соединять, манипулируя строками и массивами, имеет куда более глубинные корни.

Функции join/split языка JavaScript и implode/explode языка PHP позволяют удобно и эффективно использовать как форматы данных XML, JSON, так и собственный вариант. Последний часто оптимальнее, а первые два идеально подходят для вариантов общего пользования. Если идет передача информации другому разработчику, серверу, в файл или в базу данных, лучше XML и JSON не найти. С ними все работают, потому передача/прием информации не нуждается в комментариях.

Использование JSON в Android

Чтение и запись данных в формате JSON в Android - не только норма вещей, но и множество объектов, ориентированных на работу именно с таким форматом данных.

При этом используется именно формат JSON. Возможно, это так и есть, но вопрос не в феноменальности соцсетей, а в том что действительно представление информации в формате "имя = значение" удобно как для программирования, так и для использования. В отличие от строгого и закомплексованного «XML» это действительно человеко-удобный формат.

Ассоциативные массивы

Сложилось так, что переменные надлежит описывать (JavaScript) или хотя бы указывать начальное значение (PHP). В обоих случаях переменная может изменить свой тип очень легко. При необходимости язык выполняет это преобразование автоматически.

Но почему бы переменной не менять также свое имя, не появляться в ходе выполнения алгоритма и не исчезать, когда необходимость в ней отпадет? Ассоциативные массивы позволяют решить эту проблему, но тогда при использовании таких относительно динамичных переменных, имя массива и соответствующие синтаксические конструкции будут следовать в места их применения.

Особенно это обстоятельство ярко выражено на PHP, но с этим можно мириться, как, впрочем, с символом «$» в имени переменной и комбинацией «$this->» внутри объекта. Программируя одновременно на JavaScript и PHP, поначалу действительно диву даешься, как все отличается, но потом все становится таким привычным и естественным...

Ассоциативный массив -> JSON

В этом примере посредством библиотеки PHPOffice/PHPWord создается документ *.docx, и массив aProperties содержит свойства этого документа (автор, компания, заголовок, категория, дата создания...).

Второй массив содержит данные по странице:

  • ориентация (альбомная или обычная);
  • размеры по вертикали и горизонтали;
  • отступы (поля слева, сверху, снизу, справа);
  • колонтитулы.

Формирование документа выполняется на сервере, где установлена библиотека PHPOffice/PHPWord. На сайте предусмотрено управление значениями этих массивов посредством JavaScript. Результат в формате JSON возвращается обратно на сервер и используется в алгоритмах на PHP, в его конструкциях, то есть в массивах.

Динамичные переменные

Формат JSON решает проблему динамичных переменных. Здесь можно создавать, изменять и удалять переменные без лишних синтаксических нагромождений. Это красиво смотрится и используется в JavaScript.

В этом примере функция GetOjInfo () выбирает имя значения и значение из объекта. Изначально объект JSON-строки, присвоенной переменной ojInfo, располагает тремя элементами: Name, age и work. Чуть позже добавляется переменная Status.

После первого оператора delete строка ojInfo теряет элемент age, после второго delete - элемент work. Если предположить, что данная строка есть подборка переменных, имеющих определенный смысл, то посредством JSON можно реально создавать, изменять и удалять любые их наборы вне операционного поля (синтаксиса) описания и обработки языка JavaScript.

Формат JSON на такой вариант не был рассчитан, но такое возможно, практично и удобно.

Наверняка вы когда-нибудь слышали о JSON. Что же это такое? Что он может и как его использовать?

В данном уроке мы расскажем об основах JSON и раскроем следующие пункты:

  • Что такое JSON?
  • Для чего используется JSON?
  • Как создать строку JSON?
  • Простой пример строки JSON.
  • Сравним JSON и XML.
  • Как работать с JSON в JavaScript и PHP?
Что такое JSON?

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

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

JSON имеет следующие преимущества:

  • Он компактен.
  • Его предложения легко читаются и составляются как человеком, так и компьютером.
  • Его легко преобразовать в структуру данных для большинства языков программирования (числа, строки, логические переменные, массивы и так далее)
  • Многие языки программирования имеют функции и библиотеки для чтения и создания структур JSON.

Название JSON означает JavaScript Object Notation (представление объектов JavaScript). Как и представляет имя, он основан на способе определения объектов (очень похоже на создание ассоциативных массивов в других языках) и массивов.

Для чего используется JSON?

Наиболее частое распространенное использование JSON - пересылка данных от сервера к браузеру. Обычно данные JSON доставляются с помощью AJAX , который позволяет обмениваться данными браузеру и серверу без необходимости перезагружать страницу.

  • Пользователь нажимает миниатюру продукта в онлайн магазине.
  • JavaScript, выполняющийся на браузере, генерирует запрос AJAX к скрипту PHP, запущенному на сервере, передавая ID выбранного продукта.
  • Скрипт PHP получает название продукта, описание, цену и другую информацию из базы данных. Затем составляет из данных строку JSON и отсылает ее браузеру.
  • JavaScript, выполняющийся на браузере, получает строку JSON, декодирует ее и выводит информацию о продукте на странице для пользователя.
  • Также можно использовать JSON для отправки данных от браузера на сервер, передавая строку JSON в качестве параметра запросов GET или POST. Но данный метод имеет меньшее распространение, так как передача данных через запросы AJAX может быть упрощена. Например, ID продукта может быть включен в адрес URL как часть запроса GET.

    Библиотека jQuery имеет несколько методов, например, getJSON() и parseJSON() , которые упрощают получение данных с помощью JSON через запросы AJAX.

    Как создать строку JSON?

    Есть несколько основных правил для создания строки JSON:

    • Строка JSON содержит либо массив значений, либо объект (ассоциативный массив пар имя/значение).
    • Массив заключается в квадратные скобки ([ и ]) и содержит разделенный запятой список значений.
    • Объект заключается в фигурные скобки ({ и }) и содержит разделенный запятой список пар имя/значение.
    • Пара имя/значение состоит из имени поля, заключенного в двойные кавычки, за которым следует двоеточие (:) и значение поля.
    • Значение в массиве или объекте может быть:
      • Числом (целым или с плавающей точкой)
      • Строкой (в двойных кавычках)
      • Логическим значением (true или false)
      • Другим массивом (заключенным в квадратные скобки)
      • Другой объект (заключенный в фигурные скобки)
      • Значение null

    Чтобы включить двойные кавычки в строку, нужно использовать обратную косую черту: \" . Так же, как и во многих языках программирования, можно помещать управляющие символы и шестнадцатеричные коды в строку, предваряя их обратной косой чертой. Смотрите детали на сайте JSON .

    Простой пример строки JSON

    Ниже приводится пример оформления заказа в формате JSON:

    { "orderID": 12345, "shopperName": "Ваня Иванов", "shopperEmail": "[email protected]", "contents": [ { "productID": 34, "productName": "Супер товар", "quantity": 1 }, { "productID": 56, "productName": "Чудо товар", "quantity": 3 } ], "orderCompleted": true }

    Рассмотрим строку подробно:

    • Мы создаем объект с помощью фигурных скобок ({ и }).
    • В объекте есть несколько пар имя/значение: "orderID": 12345 Свойство с именем "orderId" и целочисленным значением 12345 "shopperName": "Ваня Иванов" свойство с именем "shopperName" и строковым значением "Ваня Иванов" "shopperEmail": "[email protected]" Свойство с именем "shopperEmail" и строковым значением "[email protected]" "contents": [ ... ] Свойство с именем "contents" , значение которого является массивом "orderCompleted": true Свойство с именем "orderCompleted" и логическим значением true
    • В массиве "contents" есть 2 объекта, представляющие отдельные позиции в заказе. Каждый объект содержит 3 свойства: productID , productName , и quantity .

    Кстати, так как JSON основан на объявлении объектов JavaScript, то вы можете быстро и просто сделать выше приведенную строку JSON объектом JavaScript:

    var cart = { "orderID": 12345, "shopperName": "Ваня Иванов", "shopperEmail": "[email protected]", "contents": [ { "productID": 34, "productName": "Супер товар", "quantity": 1 }, { "productID": 56, "productName": "Чудо товар", "quantity": 3 } ], "orderCompleted": true };

    Сравнение JSON и XML

    Во многих отношениях вы можете рассматривать JSON как альтернативу XML, по крайней мере, в сфере веб приложений. Концепция AJAX оригинально основывалась на использовании XML для передачи данных между сервером и браузером. Но в последние годы JSON становится все более популярным для переноса данных AJAX.

    Хотя XML является проверенной технологией, которая используется в достаточном количестве приложений, преимуществами JSON являются более компактный и простой для распознавания формат данных.

    Вот как будет выглядеть выше приведенный пример объекта на XML:

    orderID 12345 shopperName Ваня Иванов shopperEmail [email protected] contents productID 34 productName Супер товар quantity 1 productID 56 productName Чудо товар quantity 3 orderCompleted true

    Версия XML имеет существенно больший размер. В действительности она имеет длину 1128 символов, а вариант JSON - только 323 символа. Версию XML также достаточно трудно воспринимать.

    Конечно, это радикальный пример. И возможно создать более компактную запись XML. Но даже она будет существенно длиннее эквивалента на JSON.

    Работаем со строкой JSON в JavaScript

    JSON имеет простой формат, но создавать строку JSON вручную достаточно утомительно. Кроме того, часто нужно взять строку JSON, конвертировать ее содержание в переменную, которую можно будет использовать в коде.

    Большинство языков программирования имеют инструменты для простого преобразования переменных в строки JSON и наоборот.

    Создаем строку JSON из переменной

    JavaScript имеет встроенный метод JSON.stringify() , который берет переменную и возвращает строку JSON, представляющую ее содержание. Например, создадим объект JavaScript, который содержит сведения о заказе из нашего примера, а затем создадим из него строку JSON:

    var cart = { "orderID": 12345, "shopperName": "Ваня Иванов", "shopperEmail": "[email protected]", "contents": [ { "productID": 34, "productName": "Супер товар", "quantity": 1 }, { "productID": 56, "productName": "Чудо товар", "quantity": 3 } ], "orderCompleted": true }; alert (JSON.stringify(cart));

    Данный код выдаст:

    Обратите внимание, что метод JSON.stringify() возвращает строку JSON без пробелов. Ее сложнее читать, но зато она более компактна для передачи через сеть.

    Существует несколько способов разобрать строку JSON в JavaScript, но самый безопасный и надежный - использовать встроенный метод JSON.parse() . Он получает строку JSON и возвращает объект или массив JavaScript, который содержит данные. Например:

    var jsonString = " \ { \ "orderID": 12345, \ "shopperName": "Ваня Иванов", \ "shopperEmail": "[email protected]", \ "contents": [ \ { \ "productID": 34, \ "productName": "Супер товар", \ "quantity": 1 \ }, \ { \ "productID": 56, \ "productName": "Чудо товар", \ "quantity": 3 \ } \ ], \ "orderCompleted": true \ } \ "; var cart = JSON.parse (jsonString); alert (cart.shopperEmail); alert (cart.contents.productName);

    Мы создали переменную jsonString , которая содержит строку JSON нашего примера с заказом. Затем мы передаем данную строку методу JSON.parse() , который создает объект, содержащий данные JSON и сохраняет его в переменной cart . Остается только осуществить проверку, выведя свойства объекта shopperEmail и productName массива contents .

    В результате мы получим следующий вывод:

    В реальном приложении ваш JavaScript код будет получать заказ в виде строки JSON в AJAX ответе от скрипта сервера, передавать строку методу JSON.parse() , а затем использовать данные для отображения на странице пользователя.

    JSON.stringify() и JSON.parse() имеют другие возможности, такие как использование возвратных функций для пользовательской конвертации определённых данных. Такие опции очень удобны для конвертации различных данных в правильные объекты JavaScript.

    Работаем со строкой JSON в PHP

    PHP, как и JavaScript, имеет встроенные функции для работы с JSON строками.

    Создаем строку JSON из переменной PHP

    Функция json_encode() принимает переменную PHP и возвращает строку JSON, представляющую содержание переменной. Вот наш пример с заказом, написанный на PHP:

    Данный код возвращает абсолютно такую же строку JSON, как и в примере с JavaScript:

    {"orderID":12345,"shopperName":"Ваня Иванов","shopperEmail":"[email protected]","contents":[{"productID":34,"productName":"Супер товар","quantity":1},{"productID":56,"productName":"Чудо товар","quantity":3}],"orderCompleted":true}

    В реальном приложении ваш скрипт PHP пришлет данную строку JSON как часть AJAX ответа браузеру, где JavaScript код с помощью метода JSON.parse() преобразует ее обратно в переменную для вывода на странице пользователя.

    Вы может передавать различные флаги в качестве второго аргумента функции json_encode() . С их помощью можно изменять принципы кодирования содержания переменных в строку JSON.

    Создаем переменную из строки JSON

    Для преобразования строки JSON в переменную PHP используется метод json_decode() . Заменим наш пример для JavaScript с методом JSON.parse() на код PHP:

    Как и для JavaScript данный код выдаст:

    [email protected] Чудо товар

    По умолчанию функция json_decode() возвращает объекты JSON как объекты PHP. Существуют обобщенные объекты PHP класса stdClass . Поэтому мы используем -> для доступа к свойствам объекта в примере выше.

    Если вам нужен объект JSON в виде ассоциированного массива PHP, нужно передать true в качестве второго аргумента функции json_decode() . Например:

    $cart = json_decode($jsonString, true); echo $cart["shopperEmail"] . "
    "; echo $cart["contents"]["productName"] . "
    ";

    Данный код выдаст такой же вывод:

    [email protected] Чудо товар

    Также функции json_decode() можно передавать другие аргументы для указания глубины рекурсии и способов обработки больших целых чисел.

    Заключение

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