Наверняка вы когда-нибудь слышали о JSON. Что же это такое? Что он может и как его использовать?
В данном уроке мы расскажем об основах JSON и раскроем следующие пункты:
- Что такое JSON?
- Для чего используется JSON?
- Как создать строку JSON?
- Простой пример строки JSON.
- Сравним JSON и XML.
- Как работать с JSON в JavaScript и PHP?
JSON - простой, основанный на использовании текста, способ хранить и передавать структурированные данные. С помощью простого синтаксиса вы можете легко хранить все, что угодно, начиная от одного числа до строк, массивов и объектов, в простом тексте. Также можно связывать между собой массивы и объекты, создавая сложные структуры данных.
После создания строки JSON, ее легко отправить другому приложению или в другое место сети, так как она представляет собой простой текст.
JSON имеет следующие преимущества:
- Он компактен.
- Его предложения легко читаются и составляются как человеком, так и компьютером.
- Его легко преобразовать в структуру данных для большинства языков программирования (числа, строки, логические переменные, массивы и так далее)
- Многие языки программирования имеют функции и библиотеки для чтения и создания структур JSON.
Название JSON означает JavaScript Object Notation (представление объектов JavaScript). Как и представляет имя, он основан на способе определения объектов (очень похоже на создание ассоциативных массивов в других языках) и массивов.
Для чего используется JSON?Наиболее частое распространенное использование JSON - пересылка данных от сервера к браузеру. Обычно данные JSON доставляются с помощью AJAX , который позволяет обмениваться данными браузеру и серверу без необходимости перезагружать страницу.
Также можно использовать 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 в JavaScriptJSON имеет простой формат, но создавать строку 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 в PHPPHP, как и 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 станет важнейшим инструментом в вашей мастерской.
Формат.JSON обычно используется как часть веб-сайтов, созданных на основе Ajax. В XML он становится всё более популярным. Расширение файла.JSON относится к типам файлов описания объектов JavaScript.Json предлагает альтернативный подход к доступу к данным. Для открытия и редактирования файлов с таким расширением необходимо использовать специальные редакторы , наиболее популярные и функциональные из которых описаны ниже.
Доступные способы открытия файла с расширением JSON.
Формат файла.JSON является основным элементом Java, его главными функциями являются стандартная организация обмена информацией, используемая для записи с использованием простых информационных и контентных структур. Описание формата json использует лёгкий способ записи на основе контента и понятной компоновки. Технология, первоначально зависящая от подмножества JavaScript, теперь считается стандартом, поэтому этот тип файла используется значительно чаще.
Чем открыть файл в формате JSONВ нём используется концепция слияния значений ключа со структурой данных. Его популярность и доступность также объясняется широко используемым методом обмена данными в Javascript. Чтобы открыть для просмотра или редактирования файлы в таком формате, необходимо использовать стороннее приложение. Ниже приведён список наиболее популярных и функциональных программ, с помощью которых вы с лёгкостью откроете любой файл с расширением.JSON на компьютере.
Altova XMLSpy – эффективная и мощная утилита, инструмент редактирования и интегрированная среда разработки (IDE) для файлов XML (Extensible Markup Language). Он может использоваться для моделирования, преобразования и отладки программного обеспечения, основанного на технологии XML. Основным преимуществом программы является поддержка расширения.JSON. Софт включает в себя все необходимые инструменты для работы с приложениями, использующими XML, XML Schema XSLT и XQuery. При запуске программы виден пустой основной экран, но для оценки функциональности есть набор демо-файлов. В комплект входят отчёты о расходах, переносные формы XML, проекты SPS, заказы на поставку, примеры XBRL, примеры EPUB, наборы XQuery и файлы HTML5.
XMLSpy может работать с базами данных, созданными Microsoft SQL Server, PostgreSQL, Oracle, MySQL, IBM DB2, Informix, Sybase и Microsoft Access. Среди функций есть оценка XPath, определяющая ограничение на ошибку для проверки XML Schema, преобразование DTD (определение типа документа), а также оптимизация очень больших файлов. Интерфейс приложения понятен интуитивно, и для использования в текущем проекте можно легко выбрать необходимые инструменты. Часто используемые параметры (трансформация, проверка орфографии и т. д.) доступны в режиме быстрого доступа на главном экране.
В меню «Инструменты» пользователи могут обращаться к редактору сценариев, а также к утилитам для сравнения папок. Есть возможность добавить быстрый доступ к инструментам, которые уже установлены в системе. Altova XMLSpy может стать оптимальным решением для создания и обработки XML-данных. Предоставляя набор всех необходимых для работы инструментов, утилита должна помочь пользователям повысить производительность.
Notepad ++ – бесплатный и очень популярный текстовый редактор, который предлагает возможность создавать и изменять исходный код, а также просматривать и редактировать файлы с расширением JSON. Это отличная замена блокноту, встроенному в систему. Он эффективен как при написании простого текста, так и при программировании. Возможности Notepad ++ включают поддержку WYSIWYG, автоматическое завершение содержимого кода, подсветку синтаксиса, запись и воспроизведение макроса, а также просмотр и изменение любого текста или исходного кода в режиме Multi-View.
Notepad ++ написан на C ++ и использует только API и STL Win32, что обеспечивает быструю работу и меньший размер программы. Как утверждают производители, Notepad ++ предназначен для сокращения глобальных выбросов углекислого газа – оптимизируя как можно больше процедур без дополнительной нагрузки на систему. Программа использует меньше мощности ЦП , поэтому компьютер может снизить энергопотребление, что приведёт к меньшему загрязнению окружающей среды. Программа бесплатна не только дома, но и для коммерческого использования. В ней не отображаются объявления или предложения на донат. После установки потребуется около 10 МБ (со встроенным FTP-клиентом и конвертером ASCII-HEX), а с 15 редактируемыми текстовыми файлами используется не более 4 МБ ОЗУ. Разумеется, объем потребляемой памяти зависит от количества и размера открытых файлов.
Notepad ++ в отдельных вкладках обрабатывает сразу несколько файлов. Стоит отметить, что цвет указывает, какие открытые файлы не были сохранены (красная дискета). Благодаря поддержке десятков языков, создание и изменение скриптов стало гораздо легче (PHP, С #, html, java, PowerShell и т. д.). Более того, вы можете создавать свои собственные определения и цвета ключевых слов. Программа не только позволяет управлять всеми функциями с помощью сочетания клавиш, но и даёт возможность создавать собственные комбинации.
Если вы ищете информацию о фразе, выделите её и используйте комбинацию ALT+F2 или выберите RUN>GOOGLE SEARCH, чтобы найти её в GOOGLE. Notepad ++ позволяет протестировать код в любом популярном браузере – для этого используется сочетание клавиш или опцию меню «Run/Run». Notepad ++ позволяет конвертировать текстовые файлы во множество разных версий кода, что будет особенно полезно для людей, которые создают сайты или веб-приложения. На вкладке «Плагины» есть менеджер плагинов, который позволяет установить FTP-клиент NppFTP, что быстро и эффективно заменит файлы, например, на веб-сервере. Можно установить одно из десятков дополнений. Есть такие универсальные инструменты, как переводчик языка, голосовое произношение и «NppExec», позволяющий сразу запустить скрипт, не выходя из приложения.
Эта программа сочетает в себе скорость, небольшой размер и производительность обычного текстового редактора. Утилита расширяет функциональность такими параметрами, как редактирование текста в одном или в нескольких окнах, легко отображает символы всех Unicode-систем, а также любых других систем кодировки, установленных в системе. Дополнительным преимуществом редактора является поддержка функции для просмотра файлов JSON. Софт отображает символы, используемые в форматах Unix и Mac. Кроме того, пользователь может использовать предварительный просмотр программы, просматривать графики, содержащиеся в открытых файлах, или использовать таблицы . В отличие от обычного блокнота, AkelPad предлагает вариант редактирования отмены и чрезвычайно быстрый поиск и замену текстовых фрагментов.
Основные функции:
- режим с одним окном или многооконный редактор;
- практически неограниченный размер файла;
- поддержка UTF-8;
- отменить/повторить;
- быстрый поиск;
- печать;
- поддержка языковых модулей.
Интерфейс похож на Блокнот – программа может быть установлена параллельно с обычным текстовым редактором или как его замена.
Komodo Edit – это многоплатформенный текстовый редактор для программистов и веб-мастеров. Обеспечивает поддержку самых популярных языков. Доступны версии для Windows, Mac OS X и Linux. Последнее издание программы обеспечивает синхронизацию нескольких рабочих станций, совместную работу в режиме реального времени, поддержку большого количества языков (и улучшений в уже существующих) и общее улучшение производительности.
Кроме того, можно редактировать и создавать файлы стиля CSS и HTML-документы. Программное обеспечение предоставляет большое количество функций, в том числе автозаполнение кода, проверка синтаксиса, раскраска синтаксиса, поддержка постоянных функций, модуль записи макросов, быстрые клавиши чтение файлов JSON, и так далее. Добавлена поддержка языка Go. Изменена система подсказок, которая теперь отображается как отдельное окно, а цветовая схема Komodo по умолчанию изменена на Base16. Основная панель с инструментами по умолчанию скрыта, но её можно восстановить на постоянной основе.
Sublime Text – это функциональный редактор для программистов, и многие считают его лучшей программой в своём классе. Содержит множество интересных и уникальных решений, которые делают его очень эффективным для программистов инструментом. Имеет мощный API, основанный на языке Python, поэтому его можно расширить с помощью новых функций. Самые интересные функции программы Sublime Text:
- быстрая навигация – программа позволяет быстро перемещаться по файлам, символам, линиям или словам;
- множественный выбор – благодаря этому можно сделать сразу несколько изменений, таких как изменение в нескольких строках, массовое изменение имён переменных;
- палитра команд – Sublime Text имеет палитру команд, в которой присутствуют редко используемые команды, такие как сортировка, изменение синтаксиса, отступы и т. д;
- полноэкранный режим – программа позволяет увеличить область с кодом на весь экран, благодаря чему можно полностью сконцентрироваться на написании кода. В стандартный интерфейс с вкладками и меню можно вернуться в любое время;
- Split Edition – редактор использует возможности широкоформатных или нескольких мониторов одновременно и позволяет одновременно редактировать 2 файла;
- быстрое переключение проектов – проекты в программе сохраняют всё содержимое рабочей области, включая изменённые, но не сохранённые вручную файлы;
- API для плагинов – поддерживает мощный API на основе Python, поэтому можно создавать свои собственные плагины;
- полная настройка – отображение ключей, меню, фрагментов, макросов, автозаполнения – всё можно свободно настраивать в простых файлах в формате JSON;
- Multi-platform – программа доступна для Windows, Max OS X и Linux в 32-х и 64-разрядных версиях, а для Windows также есть портативная версия.
NFOPad – это небольшой бесплатный вьювер файлов NFO и JSON со встроенным текстовым редактором. Файлы NFO представляют собой текстовые документы, часто оснащённые ASCII, где содержится необходимая информация о программах. NFOPad – это приложение, смоделированное на стандартном Блокноте, но гораздо более обширное и содержащее дополнительные функции. Программа полностью поддерживает кодировку Unicode и обнаруживает гиперссылки и адреса электронной почты. Приложение легко настраивается, здесь можно установить шрифт ANSI или ASCII, а также выбрать цвет. Позволяет печатать и искать текст, устанавливать ширину экрана. Софт поддерживает метод перетаскивания. Стоит отметить, что приложение NFOPad будет полезно при редактировании файлов справки.
БлокнотБлокнот Windows – стандартное приложение, встроенное в операционную систему. Помимо базовых функций, программа выделяется возможностью просмотра и редактирования файлов JSON. Чтобы открыть приложение в Windows, просто нажмите Пуск (или клавишу Win) и введите «Блокнот».
Что ещё может вызывать проблемы с файломНеспособность открыть и работать с файлом JSON не обязательно означает, что на вашем компьютере не установлено соответствующее программное обеспечение. Могут быть и другие проблемы, которые также мешают работать с файлами. Ниже приведён список возможных проблем.
- Повреждение файла JSON.
- Неправильные ссылки на файл JSON в записях реестра.
- Случайное удаление описания расширения JSON из реестра Windows.
- Неполная установка приложения, поддерживающего формат JSON.
- Открытый JSON-файл заражён нежелательным и вредоносным программным обеспечением.
- У компьютера недостаточно аппаратных ресурсов, чтобы справиться с открытием файла JSON.
- Аппаратные драйверы, используемые компьютером для открытия файла JSON, устарели.
Вы правильно загрузили и установили одну из программ, и проблема с файлом JSON по-прежнему происходит? Если ни один из примеров не подходит под описание вашей проблемы, тогда, скорее всего, компьютер заражён серьёзным вирусом и может потребоваться переустановка Windows.
Переменные, массивы и объекты - привычная и удобная форма представления данных. Описывать данные принято в языке браузера 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 в JavaScript есть глобальный объект JSON. У объекта JSON есть два метода: stringify() и parse() . Кроме этих двух методов он не содержит больше никакой дополнительной функциональности.
Метод stringify()Метод stringify() преобразует значение JavaScript в строку JSON.
Особенности преобразования:
- Значение undefined , функция или значение типа symbol , встреченные во время преобразования, будут либо опущены (если они найдены в объекте), либо превращены в null (если они найдены в массиве).
- Члены прототипа и неперечислимые свойства игнорируются.
- Массив определяет набор свойств объекта, которые будут включены в JSON-строку. В качестве значений массива указываются строки, соответствующие именам свойств преобразуемого объекта.
- Функция позволяет заменить значения свойств объекта в JSON-строке. Функция должна содержать два параметра: имя свойства и значение свойства. Имя свойства является строкой. Функция должна возвращать новое значение свойства.
- Если значением параметра является null , то JSON-строка будет включать все свойства объекта.
- Число указывает количество пробелов, используемых в качестве отступа для каждого уровня вложенности. Каждый последующий уровень вложенности дополняется новыми отступами. Например, если в качестве значения параметра используется число 2, то на первом уровне вложенности отступ будет составлять два пробела, на последующем уровне вложенности отступ будет составлять 4 пробела и т. д. Максимальное количество пробелов, которое можно указать - 10. Если указать большее число, оно автоматически уменьшится до 10.
- Строка определяет символ, используемый в качестве отступа для каждого уровня вложенности. Длина строки ограничена 10 символами, если указать строку длиннее, она обрезается до 10 символов. Использование строки также позволяет использовать табуляцию ("\t") в качестве отступа. Каждый последующий уровень вложенности дополняется новыми символами отступа. Например, если в качестве значения параметра указан символ - (дефис), то на первом уровне вложенности в качестве отступа будет использоваться один дефис, на последующем уровне вложенности будет использоваться 2 дефиса и т. д.
JSON-строка.
Пример let person = { name: "Гомэр", age: 40, work: { place: "Атомная станция", location: "Спрингфилд" } } // Пример с одним параметром console.log(JSON.stringify(person)); // "{"name":"Гомэр","age":40,"work":{"place":"Атомная станция","location":"Спрингфилд"}}" // Пример с двумя параметрами (массив) console.log(JSON.stringify(person, ["name", "age"])); // "{"name":"Гомэр","age":40}" // Пример с двумя параметрами (функция) console.log(JSON.stringify(person, function (key, value) { switch (key) { case "name": return "Барт"; case "age": return 10; case "work": return undefined; default: return value; } })); // "{"name":"Барт","age":10}" // Пример с тремя параметрами console.log(JSON.stringify(person, null, 2)); /* { * "name": "Гомэр", * "age": 40, * "work": { * "place": "Атомная станция", * "location": "Спрингфилд" * } * } */ Метод parse()Метод parse() преобразует строку JSON в соответствующее значение JavaScript.
Особенности преобразования:
- Если во время преобразования в строке JSON встретиться значение undefined , то оно будет опущено (не будет включено в результат).
Соответствующее значение JavaScript (примитивное значение, объект или массив).
Пример JSON.parse("{}"); // {} JSON.parse("true"); // true JSON.parse(""); // JSON.parse("null"); // nullНаверняка вы когда-нибудь слышали о JSON. Что же это такое? Что он может и как его использовать?
В данном уроке мы расскажем об основах JSON и раскроем следующие пункты:
- Что такое JSON?
- Для чего используется JSON?
- Как создать строку JSON?
- Простой пример строки JSON.
- Сравним JSON и XML.
- Как работать с JSON в JavaScript и PHP?
JSON - простой, основанный на использовании текста, способ хранить и передавать структурированные данные. С помощью простого синтаксиса вы можете легко хранить все, что угодно, начиная от одного числа до строк, массивов и объектов, в простом тексте. Также можно связывать между собой массивы и объекты, создавая сложные структуры данных.
После создания строки JSON, ее легко отправить другому приложению или в другое место сети, так как она представляет собой простой текст.
JSON имеет следующие преимущества:
- Он компактен.
- Его предложения легко читаются и составляются как человеком, так и компьютером.
- Его легко преобразовать в структуру данных для большинства языков программирования (числа, строки, логические переменные, массивы и так далее)
- Многие языки программирования имеют функции и библиотеки для чтения и создания структур JSON.
Название JSON означает JavaScript Object Notation (представление объектов JavaScript). Как и представляет имя, он основан на способе определения объектов (очень похоже на создание ассоциативных массивов в других языках) и массивов.
Для чего используется JSON?Наиболее частое распространенное использование JSON - пересылка данных от сервера к браузеру. Обычно данные JSON доставляются с помощью AJAX , который позволяет обмениваться данными браузеру и серверу без необходимости перезагружать страницу.
Также можно использовать 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 в JavaScriptJSON имеет простой формат, но создавать строку 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 в PHPPHP, как и 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 станет важнейшим инструментом в вашей мастерской.