JSON кункурент XML PHP


Оглавление (нажмите, чтобы открыть):

Примеры использования JSON-формата на PHP и JavaScript

Что такое JSON

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

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

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

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

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

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

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. Пример использования:

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

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

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

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

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

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

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

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

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

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

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

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

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

Обе функции JSON.parse и JSON.stringify имеют доп.параметры для уточнения правил преобразований. Не буду останавливаться на них в рамках этой статьи. Если необходимо, о них можно почитать, например, здесь: https://learn.javascript.ru/json.

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

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

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

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

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

На сервере скрипт get-info.php к которому делается ajax-запрос, может быть, например, таким:

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

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

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

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

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

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

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

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

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

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


Преобразование XML в JSON в PHP SimpleXML

это строка XML, которую я пытаюсь преобразовать. Я использовал следующий код.

И я получаю следующие данные JSON.

Но я не хочу «@attributes». Я хочу вывод, как показано ниже:

Как я могу это сделать ?

Решение

Вы не хотите иметь « @attributes msgstr «поле закодировано в JSON, однако это стандартный способ, которым PHP JSON сериализует элемент SimpleXMLElement.

Поскольку вы говорите, что хотите это изменить, вам нужно изменить способ, которым PHP JSON сериализует объект. Это возможно путем реализации JsonSerializable с SimpleXMLElement самостоятельно, а затем предоставьте сериализацию JSON, как вы хотите:

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

Вы можете легко интегрировать его, например, вместо

ты можешь использовать

и остальная часть вашей функции работает так же, но только с вашими желаниями сериализации.

Функция сериализации для приведенного выше примера:

Некоторые заметки здесь:

  • В сериализации вы должны позаботиться о типе элемента самостоятельно. Дифференциация выполняется сверху для отдельных элементов без дочерних элементов. Если вам нужна обработка атрибутов, вам нужно добавить ее.
  • trim($this) возможно, уже избавляет вас от проблемы, которую вы пытаетесь решить $result = str_replace(array(«\n», «\r», «\t»), », $data); , SimpleXMLElement в любом случае JSON будет сериализован « \r » персонажи (SimpleXMLElement использует « \n «для перерывов). Дополнительно вас могут заинтересовать правила нормализация пробелов в XML .
  • Если атрибут имеет то же имя, что и дочерний элемент, он будет перезаписан дочерним элементом.
  • Если дочерний элемент следует за другим дочерним элементом с таким же именем, он будет перезаписан.

Два последних пункта — просто сохранить пример кода. Способ, согласованный со стандартной сериализацией PHP JSON SimpleXMLElement дается в серии моих сообщений в блоге.

Основы именно этой процедуры и образцовые JsonSerialize Реализация доступна в третьем посте: SimpleXML и JSON кодируют в PHP — часть III и конец .

Что лучше: Json или XML (PHP)

Я манипулирую несколькими данными с помощью PHP, у меня есть выбор между Json и XML. Но я не знаю, что выбрать, я никогда не работал с одним из них. Поэтому я хочу самый простой.

Также интересно, есть ли хорошие классы, которые могут облегчить синтаксический анализ (XML или Json).

Я сосредоточен главным образом на простоте использования, а не на скорости и масштабе.

json.org делает простой JSON-анализ. SimpleXML делает XML простым для PHP.

Когда вы выбираете, какой из них действительно зависит от вашего приложения. Если вы будете передавать данные на JavaScript для обработки на стороне клиента, я рекомендую JSON. IMO, XML лучше для обмена данными между системами, потому что он очень хорошо понимается и читается человеком (упрощая для вас перевод). JSON меньше по проводу, так как нет закрывающих тегов.

Разбор и генерация JSON изначально включены в php: http://www.php.net/json

Я чувствую, что следующие записи StackOverflow отвечают на ваш вопрос лучше:

Что проще всего? jQuery упрощает сериализацию ваших объектов JavaScript в объектах JSON.

Но если вы все еще не уверены.

Вот некоторые другие статьи:

JSON рассматривает ваши данные как структуры, известные из языков программирования: карты/словари (называемые «объекты» в JSON), массивы и литералы. JSON помещает эти базовые конструкции в иерархии.

XML также является иерархическим, но имеет три основные части: элементы (с начальными/конечными тегами), атрибуты внутри элементов и текстовое содержимое. Элементы и текстовое содержимое могут быть смешаны, поэтому он подходит для разметки документов. JSON не очень хорош для этого.

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

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

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

Как прочитать JSON с помощью PHP

Формат JSON представляет из себя упорядоченную, определенным образом, информацию. Это альтернатива формату XML, с более минималистической структурой данных. О том, как прочитать эти данные через PHP.

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

Как прочитать содержимое файла

В переменную f_json заключаем адрес файла JSON:

Затем этот файл достаём по адресу указанному в f_json:

Если заглянуть в JSON файл напрямую, можно увидеть следующие данные:

Иногда в файле данные выглядят так:

Эта «неправильная» кодировка является символами Unicode, записанные в восьмибитной кодировке.

Просмотрим содержимое файла JSON в браузере:


В данном случае будет отдан массив в одну строчку. Ниже строчка разбита, для наглядности, на несколько строк.

Для чтения этих данных декодируем строки файла:

Теперь выведем объекты в этом файле. Например, мы хотим достать заголовок один, который находится под ключевым атрибутом title_one. Для этого воспользуемся следующей командой:

Мы сохранили данные в переменную title_one. Теперь с ними можно делать всё что угодно. Например, вывести её:

В этом случае будет показано:

Как получить значение через запятую в массиве данных файла JSON

Пример посложнее. Мы хотим достать отдельные данные для «items-1, items-2, items-3, items-4». Чтобы каждое значение было схвачено в отдельную переменную.

Для этого, сначала мы обратимся к этой строке:

Теперь требуется преобразовать данные из строки в массив. Воспользуемся функцией разбиения строки в PHP:

Теперь мы можем вывести отдельные элементы так:

Причем первое значение выводится с параметром [0]. Так исторически сложилось.

JSON формат: создание данных, использование с PHP и JS

Что такое JSON и на что он способен? В этой статье вы узнаете, как использовать JSON для легкой работы с данными. Так же мы рассмотрим, как работать с JSON используя при этом PHP и JavaScript.

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

В этой статье мы узнаете основы работы с json форматом. Мы будем следовать следующим темам:

  • Что такое JSON формат?
  • Для каких целей используется JSON?
  • Как создавать JSON строки?
  • Простой пример JSON данных
  • Сравнение JSON с XML
  • Как работать с JSON через PHP и JS?
Мастер Йода рекомендует:  Как писать ужасный код делимся опытом

Что такое JSON формат?

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

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

JSON имеет много преимуществ:

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

Буквально, аббревиатура JSON означает – JavaScript Object Notation. Как описано ранее, этот формат основан на создании объектов, что-то подобное к ассоциативным массивам в других языках программирования.

Для каких целей используется JSON?

Более всего, json используется для обмена данными между javascript и серверной стороной (php). Другими словами, для технологии ajax. Это очень удобно, когда вы передаете несколько переменных или целые массивы данных.

Как это выглядит на примере:

  1. Пользователь кликает по превьюшке картинки
  2. JavaScript обрабатывает это событие и посылает ajax запрос к PHP скрипту, передавая ID картинки.
  3. На сервере, php получает описание картинки, имя картинки, адрес к большому изображению и другую информацию из базы данных. Получив, преобразовывает в JSON формат и отправляет обратно на страницу пользователя.
  4. JavaScript получает ответ в виде JSON, обрабатывает данные, формирует html код и выводит увеличенное изображение с описанием и другой информацией.

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

Всеми любимый jQuery, имеет функции getJSON() и parseJSON(), которые помогают работать с форматом через ajax запросы.

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

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

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

Важно! Если вы используете двойные кавычки в значениях, экранируйте их с помощью обратного слеша: \». Также можно использовать hex закодированные символы, так как вы это делаете в других программных языках.

Простой пример JSON данных

Следующий пример показывает, как можно сохранять данные в «корзине» интернет магазина с помощью JSON формата:

Давайте разберем эти данные по частям:

  1. В начале и конце мы использует фигурные дужки < и >, которые дают понять, что это объект.
  2. Внутри объекта мы имеем несколько пар имя/значение:
  3. «orderID»: 12345 – поле с именем orderId и значение 12345
  4. «shopperName»: «John Smith» – поле с именем shopperName и значение John Smith
  5. «shopperEmail»: «johnsmith@example.com» – подобно, как и в предыдущем поле, здесь храниться email покупателя.
  6. «contents»: [ . ] – поле с именем content, значение которого массив.
  7. «orderCompleted»: true – поле с именем orderCompleted, значение которого true
  8. Внутри массива contents, мы имеем два объекта, которые отображают содержимое корзины. Каждый объект продукта имеет три свойства: productID, productName, quantity.

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


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

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

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

Вот вышеописанный JSON пример, только переписанный в XML формате:

Как видите в несколько раз длиннее нежели JSON. По факту, этот пример длинной 1128 символов, в то время, как JSON версия всего лишь 323 символа. Также XML версию сложнее читать.

Естественно, нельзя судить только по одному примеру, но даже небольшие объемы информации занимают меньше места в JSON формате, нежели в XML.

Как работать с JSON через PHP и JS?

Вот мы и подошли к самому интересному – практической стороне JSON формата. Сначала отдадим дань JavaScript’у, после посмотрим, как можно манипулировать с JSON через PHP.

Создание и чтение JSON формата с помощью JavaScript

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

К счастью, многие языки программирования предоставляют инструменты для работы с JSON строками. Основная идея которых:

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

Чтение JSON строк, вы начинаете с JSON строки содержащей определенные данные, пропускаете строку через функцию, которая создает переменные содержащие данные.

Давайте посмотрим, как это делается в JavaScript.

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

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

Вот что выведется на экран:

Заметьте, что JSON.stringify() выводит JSON строки без пробелов. Сложно читать, но так более компактно, что важно при пересылке данных.

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

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

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

Выведется следующая информация:

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

Создание и чтение JSON формата с помощью PHP

PHP, подобно JavaScript’у, имеет функции позволяющие конвертировать переменные в JSON формат, и наоборот. Давайте рассмотрим их.

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

Json_encode() принимает PHP переменную и возвращает JSON строку, репрезентируя данные переменной. Вот наш пример «корзины» написанный на PHP:

Этот код выводит в точности такой результат, как и JavaScript пример – валидную JSON строку репрезентирующую содержимое переменных:

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

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

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

Аналогично к вышеописанному, существует функция json_decode(), позволяющая декодировать JSON строки и помещать содержимое в переменные.

Как и в случае с JavaScript, этот код выведет следующее:

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

Если в дальнейшем вы захотите использовать данные в виде ассоциативного массива, просто передайте вторым параметров true в функции json_decode(). Вот пример:

Это выводит тот же результат:

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

В заключение о JSON формате

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

Надеюсь, вам понравилось читать эту статью. Успешной разработки!

Преобразование XML в JSON на PHP (исходники)

Появление технологии Asynchronous JavaScript + XML (Ajax) вызвало новую волну энтузиазма в разработке Web-приложений, а также пересмотр многими разработчиками и проектировщиками своих методик создания Web-приложений. JavaScript Object Notation (JSON) представляет собой формат обмена данными, используемый для представления данных в бизнес-логику, выполняющуюся в браузерах. Многие Ajax-разработчики предпочитают обрабатывать данные напрямую, используя JSON в JavaScript-коде на стороне браузера. По мере расширения применения JSON в программах, работающих на серверах промежуточного уровня, станет необходимым предоставлять данные корпоративных приложений в браузеры в формате JSON, а не в XML-формате. Это означает, что разработчики должны преобразовать существующие корпоративные данные на стороне сервера, закодированные в XML-формате, в JSON-формат перед передачей их в браузер. В данной статье демонстрируется использование основанных на PHP серверных программ для преобразования данных приложения из XML-формата в JSON-формат.

XML — это стандарт для разметок. Основанная на XML разметка используется для описания данных, представляемых при помощи тегов, которые не обязательно должны быть определены заранее. XML очень хорошо расширяем, поскольку можно создавать новые теги по мере необходимости. В листинге 1 показан пример структуры данных, представленных в XML-формате.


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

JSON не является языком разметки, как XML. Это текстовый формат обмена данными. Используется синтаксис JavaScript-объектов и массивов. В двух словах, JSON позволяет предоставлять данные просто. Например, объекты заключаются в фигурные скобки (<>), массивы в квадратные ([]). Фрагмент JavaScript-кода может без труда принять закодированные в JSON данные без выполнения какой-либо специального синтаксического анализа или дополнительного преобразования данных. В листинге 2 приведена структура данных, представленная в JSON-формате.

Можно заметить, что каждый фрагмент данных, показанный в XML-формате в листинге 1, также присутствует в JSON-примере в листинге 2. Однако различие заключается в том, как JSON кодирует данные, используя типы данных JavaScript — объекты и массивы. Структура данных начинается с объекта, содержащего свойство с именем «contacts» , которое само по себе является объектом. Этот объект имеет одно свойство с названием «contact» , которое тоже является объектом. Этот объект содержит несколько свойств, формирующих детали контакта. Обратите внимание на то, что объект «contact» содержит другой (вложенный) объект «address» , который описывает детали адреса. Как и в XML, данные в JSON-формате описывают сами себя, поэтому их может легко прочитать как человек, так и машина.

Теперь давайте рассмотрим, как данные обрабатываются в коде, выполняющемся на стороне браузера. Когда сервер передает XML-данные в браузер, эти XML-данные обрабатываются с использованием Document Object Model (DOM) API. Однако JavaScript-разработчики должны изучить все тонкости XML-обработки и написать много дополнительного кода для синтаксического разбора XML-данных, прежде чем с ними можно будет что-либо сделать. С появлением JSON код на стороне сервера может спакетировать и передать данные приложения в JSON-формате в ответ на запрос браузера. Если код на стороне сервера передает данные в JSON-формате в браузер, JavaScript-разработчикам не нужно писать какую-либо дополнительную сложную логику для синтаксического разбора XML. Кроме этого, полученные в JSON-формате данные будут готовы для обработки в коде на стороне браузера как родная для JavaScript структура данных. Фрагмент кода, приведенный в листинге 3, показывает, что для обработки данных в JSON-формате не нужна дополнительная работа.

Во фрагменте кода, выполняющегося на стороне браузера и приведенного в листинге 3, result — это строка в JSON-формате, полученная от сервера. Все что требуется — одна строка кода для преобразования этих строковых данных в родной для JavaScript тип данных путем использования выражения eval . Можно заметить, что работать с JSON-данными на стороне браузера намного проще. Использование JSON привносит простоту и смысл в код на стороне браузера.

Выражение eval в листинге 3 будет выполняться независимо от того, что возвратит сервер, поэтому здесь имеет место риск нарушения системы защиты. Этот риск ограничен, поскольку политика системы защиты браузера ограничивает HTTP-запросы в JavaScript только тем сервером, с которого код был первоначально загружен. Но все-таки в некоторых ситуациях было бы благоразумно проверить получаемые от сервера данные на соответствие ожидаемым (возможно, с использованием регулярных выражений) перед передачей их в выражение eval .

Все большее количество приложений нуждается в преобразовании XML-данных в JSON. Несколько Web-сервисов, выполняющих такие преобразования, уже появились. IBM T.J. Watson Research Center разработал особый метод, использующий PHP для выполнения преобразования. Этот метод принимает XML-данные на входе и преобразует их в JSON-формат на выходе. Такое PHP-решение обеспечивает несколько преимуществ:

  • Его можно запускать в автономном режиме, из командной строки.
  • Его можно включить в существующий код, выполняющийся на стороне сервера.
  • Его можно легко разместить как Web-сервис в Web.

Преобразование XML-в-JSON требует использования двух базовых функциональных возможностей PHP:

  • SimpleXMLElement
  • Services_JSON с http://pear.php.net

SimpleXMLElement поддерживается в PHP версии 5 и выше. Это объект со свойствами, содержащими данные, хранимые в XML-документе. Services_JSON — это предложение с открытым исходным кодом (появившееся в конце 2005), реализуемое на PHP. Оно предоставляет функции JSON-кодирования (PHP-данные в JSON) и декодирования (JSON в PHP-данные). Эта библиотека PHP-классов с открытым исходным кодом в настоящее время доступна на Web-сайте PEAR.

Используя только эти две базовые функциональные возможности PHP, можно преобразовать любые произвольные XML-данные в JSON-формат. Прежде всего, нужно преобразовать XML-содержимое в подходящий PHP-тип данных, используя SimpleXMLElement . Затем PHP-данные предоставляются в кодировщик Services_JSON , который, в свою очередь, формирует окончательный вывод данных в JSON-формате.

Данная реализация xml2json состоит из трех частей:

  • xml2json.php — PHP-класс с двумя статическими функциями.
  • xml2json_test.php — Тестовый драйвер для работы с функцией преобразования xml2json .
  • test1.xml, test2.xml, test3.xml, test4.xml — XML-файлы различной сложности.

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

В листинге 4 определяются некоторые полезные константы. Первая строка кода импортирует реализацию Services_JSON .

Фрагмент кода, приведенный в листинге 5, представляет собой входную функцию в преобразователь xml2json . Она принимает в качестве входного параметра XML-данные и преобразует XML-строку в объект SimpleXMLElement , который передается в другую функцию (рекурсивно) в данном классе. Эта функция преобразует XML-элементы в ассоциативный PHP-массив. Данный массив затем передается в качестве входного параметра в кодировщик Services_JSON , который выдает данные в JSON-формате.

Длинный фрагмент кода, приведенный в листинге 6, использует методологию рекурсии, разработанную PHP-сообществом сторонников открытого кода. Он принимает объект SimpleXMLElement в качестве входного параметра и рекурсивно проходит по вложенному XML-дереву. Он сохраняет все обнаруженные XML-элементы в ассоциативном PHP-массиве. Вы можете настроить предельную глубину рекурсии, изменив константу, определенную в листинге 4.

В конце успешного прохождения по XML-дереву эта функция преобразует и сохранит все XML-элементы (корневой элемент и все дочерние элементы) в ассоциативном PHP-массиве. Для сложных XML-документов получаемый PHP-массив будет таким же сложным. После завершения формирования этого PHP-массива кодировщик Services_JSON может легко преобразовать его в данные JSON-формата. Чтобы понять логику рекурсии, просмотрите документированный исходный файл.

Фрагмент кода, приведенный в листинге 7, представляет собой тестовый драйвер, применяющий логику преобразования xml2json .

Вы можете выполнить программу из командной строки с именем XML-файла, указанным как аргумент командной строки:

При выполнении из командной строки программа читает XML-содержимое из файла в строковую переменную. Затем она вызывает статическую функцию в классе xml2json для получения результата в JSON-формате. Кроме выполнения программы из командной строки вы можете изменить логику в этом исходном файле для предоставления преобразователя xml2json в виде вызываемого Web-сервиса, использующего протоколы доступа Simple Object Access Protocol (SOAP) или Representational State Transfer (REST). При необходимости можно легко сделать это в PHP с минимальными затратами.

В листинге 8 приведен один из четырех тестовых XML-файлов, поставляемых со статьей для тестирования реализации xml2json . Степень сложности этих файлов различна. Вы можете передать один из этих файлов в виде аргумента командной строки в тестовый драйвер xml2json_test.php.

Фрагмент кода, приведенный в листинге 9, представляет собой результат в формате JSON при использовании файла test2.xml в качестве аргумента командной строки для тестового драйвера xml2json_test.php.

Обратите внимание на то, что XML-атрибут id для элемента сохраняется в JSON-данных как свойство объекта «@attributes» , а элемент сохраняется как массив объектов. Полученные данные в JSON-формате готовы для приема в JavaScript-коде с использованием выражения eval .

JSON только начинает приобретать вес среди Web-разработчиков. Его преимущества, видимые главным образом JavaScript-разработчиками, состоят в элегантности и простоте. В определенных ситуациях JSON может быть достойной альтернативой XML. В данной статье аргументируется необходимость преобразования XML-в-JSON на сервере промежуточного уровня. Затем внимание уделяется логическому обоснованию использования корпоративных данных в XML-формате в виде данных в формате JSON, для того чтобы программы на стороне браузера могли легко использовать их. Предоставляется PHP-код, который может выполнять преобразование XML-в-JSON.

Вы можете использовать исходный код, поставляемый с данной статьей, в различных целях — как автономную программу, как библиотеку классов для существующей программы, выполняющейся на стороне сервера, либо как функцию Web-сервиса SOAP/REST для участия в корпоративной сервис-ориентированной архитектуре (Service-Oriented Architecture — SOA).

Что лучше: Json или XML (PHP) [закрыто]

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

также мне интересно, есть ли хорошие классы, которые могут упростить синтаксический анализ (XML или Json).

я фокусируюсь в основном на простоте использования, а не на скорости и масштабе.

11 ответов

json.org делает разбор JSON простым. SimpleXML делает XML простым для PHP.

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

синтаксический анализ и генерация JSON изначально включены в php: http://www.php.net/json

Я чувствую, что следующие записи StackOverflow лучше всего отвечают на ваш вопрос:

а что легче?
jQuery упрощает сериализацию объектов JavaScript в объекты JSON.

но, если вы все еще не уверены.

вот некоторые другие статьи:

JSON рассматривает ваши данные как структуры, известные из языков программирования: карты / словари (называемые «объектами» в JSON), массивы и литералы. JSON помещает эти базовые конструкции в иерархии.

XML также иерархичен, но имеет три основные части: элементы (с тегами start/end), атрибуты внутри элементов и текстовое содержимое. Элементы и текстовое содержимое могут быть смешаны, поэтому он подходит для разметки документов. JSON не очень хорош для этого.


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

XML намного сложнее, чем JSON. Легко и весело писать свой собственный парсер JSON, но написание XML-парсера-это огромное предприятие (конечно, не для тех, кто новичок в XML). В Javascript JSON можно проанализировать, оценив текст (это довольно ненадежной).

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

следует учитывать, что, по крайней мере, при загрузке, разница в размере между XML и JSON (XML больше) не очень интересна, потому что вы будете использовать сжатие GZIP через HTTP.

Если вы уверены, что будете работать с Javascript и никогда не будете иметь другого типа клиента (другой веб-сайт, клиент Flash/Flex, что угодно), то JSON отлично и, возможно, немного менее безболезненно. С другой стороны, выполнение XML теперь экономит ваше время, если вам когда-либо понадобится получить материал работа через XML.

в любом случае, хорошая вещь, чтобы сделать, это проверить, что ребята Google делают с помощью LiveHTTPHeaders для Gmail или любого из их приложений. Я уверен, что это XML, а не JSON, но вы можете проверить меня. Во всех случаях делать то, что делает Google, можно считать «не думать», но они, как правило, умнее меня и имеют гораздо больше человеко-часов, чтобы думать в любом случае 🙂

пример: вы хотите поместить свое приложение в большой контекст (EAI), затем вы должны использовать XML (возможно, Webservices & WSDL).

Example2: если вы хотите простой пользовательский интерфейс, основанный на javascript и ajax, вы должны рассмотреть JSON.

JSON наиболее полезен при работе с javascript. В большинстве случаев XML-библиотеки настолько просты в использовании, что простота использования почти одинакова.

Если вы выбираете XML use SimpleXML, чрезвычайно простая в использовании библиотека

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

Я использую JSON с PHP из-за того, насколько это просто:

есть ряд (возможно, односторонних) статей JSON vs XML в нижней части json.org Страница.

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

самый простой для запуска-XML. Основной причиной этого является не синтаксический анализ (для XML и JSON есть очень хорошие библиотеки, которые делают это для вас, см. другие сообщения), а понятность:

JSON работает с большим количеством различных скобок, при просмотре ваших XML-данных вы, вероятно, увидите любые ошибки быстрее. (Предполагая, что вы знаете, например, HTML)

также возможно (но необязательно) создать XML schema, что делает проверку ваших данных автоматически легко. Это может сэкономить вам много времени!

Работа с XML в PHP

Парсинг сайтов

Сейчас мы с вами изучим работу с XML. XML — это формат для обмена данными между сайтами. Он очень похож на HTML, только в XML разрешены свои теги и атрибуты.

Зачем нужен XML при парсинге? Иногда бывает так, что сайт, который вам нужно спарсить, имеет API, с помощью которого можно получить желаемое, особо не напрягаясь. Поэтому сразу совет — перед тем, как парсить сайт, проверьте, нету ли у него API.

Что такое API? Это набор функций, с помощью которых вы можете слать запрос этому сайту и получать нужный ответ. Вот этот ответ чаще всего приходит в формате XML. Поэтому давайте приступим к его изучению.

Работа с XML в PHP

Пусть у вас есть XML. Он может быть в строке, либо хранится в файле или отдаваться по запросу к определенному URL.

Пусть XML хранится в строке. В этом случае из этой строки нужно создать объект с помощью new SimpleXMLElement:

Сейчас у нас в переменной $xml хранится объект с разобранным XML. Обращаясь к свойствам этого объекта можно получать доступ с содержимому тегов XML. Как именно — разберем чуть ниже.

Если же XML хранится в файле или отдается по обращению к URL (что чаще всего и бывает), то следует использовать функцию simplexml_load_file, которая делает тот же объект $xml:

Приемы работы

В примерах ниже наш XML хранится в файле или по URL.

Пусть дан следующий XML:

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

Как вы видите, у объекта $xml есть свойства, соответствующие тегам.

Вы может обратили внимание, что тег нигде не фигурирует при обращении. Это потому, что он корневой тег. Можно переименовать его, например, на — и ничего не поменяется:

Корневой тег в XML может быть только один, так же, как и тег в обычном HTML.

Давайте чуть модифицируем наш XML:

В этом случае у нас получится цепочка обращений:

Работа с атрибутами

Пусть некоторые данные хранятся в атрибутах:

Теги с дефисами

В XML разрешены теги (и атрибуты) с дефисом. В этом случае обращение к таким тегам происходит так:

Перебор циклом

Пусть теперь у нас не один работник, а несколько. В этом случае мы можем перебрать наш объект с помощью цикла foreach:

Из объекта в нормальный массив

Если вам неудобно работать с объектом, вы можете преобразовать его в нормальный массив PHP с помощью следующего хитрого приема:


Больше информации

Парсинг на основе sitemap.xml

Зачастую на сайте есть файл sitemap.xml. В этом файле хранятся ссылки на все страницы сайта для удобства индексации их поисковыми системами (индексация — это по сути и есть парсинг сайта яндексом и гуглом).

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

Как проверить наличие этого файла: пусть мы парсим сайт site.ru, тогда обратитесь в браузере к site.ru/sitemap.xml — если что-то увидите, значит он там есть, а если не увидите — то увы.

Если sitemap есть — то в нем содежатся ссылки на все страницы сайта в формате XML. Спокойно забираете этот XML, парсите его, отделяете ссылки на нужные вам страницы любым удобным вам способом (например, анализом URL, который был описан в методе паука).

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

Подробнее об устройстве sitemap.xml читайте в википедии.

Что вам делать дальше:

Приступайте к решению задач по следующей ссылке: задачи к уроку.

Когда все решите — переходите к изучению новой темы.

json_encode — Возвращает JSON-представление данных

(PHP 5 >= 5.2.0, PECL json >= 1.2.0, PHP 7)

json_encode — Возвращает JSON-представление данных

Описание

Возвращает строку, содержащую JSON-представление value .

Список параметров

value — значение, которое будет закодировано. Может быть любого типа за исключением resource .

Все строковые данные должны быть в кодировке UTF-8.

PHP реализует надмножество JSON, который описан в первоначальном » RFC 4627, — также кодируя и декодируя скалярные типы и NULL . RFC 4627 поддерживает эти значения только в случае, если они находятся внутри массива или объекта.

И хотя это надмножество согласуется с расширенным определением «JSON текста» из новых » RFC 7159 (который старается заменить собой RFC 4627) и » ECMA-404, это все равно может приводить к проблемам совместимости со старыми парсерами JSON, которые строго придерживаются RFC 4627 с кодированием скалярных значений.

Битовая маска составляемая из значений JSON_HEX_QUOT , JSON_HEX_TAG , JSON_HEX_AMP , JSON_HEX_APOS , JSON_NUMERIC_CHECK , JSON_PRETTY_PRINT , JSON_UNESCAPED_SLASHES , JSON_FORCE_OBJECT , JSON_UNESCAPED_UNICODE . Смысл этих констант объясняется на странице JSON констант.

Задает максимальную глубину. Должен быть больше нуля.

Возвращаемые значения

Возвращает JSON закодированную строку ( string ) в случае успеха или FALSE в случае возникновения ошибки.

Список изменений

Версия Описание
5.5.0 Добавлен параметр depth .
5.4.0 В options были добавлены константы JSON_PRETTY_PRINT , JSON_UNESCAPED_SLASHES , и JSON_UNESCAPED_UNICODE .
5.3.3 Константа JSON_NUMERIC_CHECK была добавлена в option .
5.3.0 Был добавлен параметр options .

Примеры

Пример #1 Пример использования json_encode()

= array( ‘a’ => 1 , ‘b’ => 2 , ‘c’ => 3 , ‘d’ => 4 , ‘e’ => 5 );

echo json_encode ( $arr );
?>

Результат выполнения данного примера:

Пример #2 Пример использования json_encode() , показывающий действия некоторых его опций

echo «Обычно: » , json_encode ( $a ), «\n» ;
echo «Тэги: » , json_encode ( $a , JSON_HEX_TAG ), «\n» ;
echo «Апострофы: » , json_encode ( $a , JSON_HEX_APOS ), «\n» ;
echo «Кавычки: » , json_encode ( $a , JSON_HEX_QUOT ), «\n» ;
echo «Амперсанды: » , json_encode ( $a , JSON_HEX_AMP ), «\n» ;
echo «Юникод: » , json_encode ( $a , JSON_UNESCAPED_UNICODE ), «\n» ;
echo «Все: » , json_encode ( $a , JSON_HEX_TAG | JSON_HEX_APOS | JSON_HEX_QUOT | JSON_HEX_AMP | JSON_UNESCAPED_UNICODE ), «\n\n» ;

echo «Отображение пустого массива как массива: » , json_encode ( $b ), «\n» ;
echo «Отображение пустого массива как объекта: » , json_encode ( $b , JSON_FORCE_OBJECT ), «\n\n» ;

$c = array(array( 1 , 2 , 3 ));

echo «Отображение неассоциативного массива как массива: » , json_encode ( $c ), «\n» ;
echo «Отображение неассоциативного массива как объекта: » , json_encode ( $c , JSON_FORCE_OBJECT ), «\n\n» ;

$d = array( ‘foo’ => ‘bar’ , ‘baz’ => ‘long’ );

echo «Ассоциативный массив всегда отображается как объект: » , json_encode ( $d ), «\n» ;
echo «Ассоциативный массив всегда отображается как объект: » , json_encode ( $d , JSON_FORCE_OBJECT ), «\n\n» ;
?>

Результат выполнения данного примера:

Пример #3 Пример с последовательными индексами начинающимися с нуля и непоследовательными индексами массивов

echo «Последовательный массив» . PHP_EOL ;
$sequential = array( «foo» , «bar» , «baz» , «blong» );
var_dump (
$sequential ,
json_encode ( $sequential )
);

echo PHP_EOL . «Непоследовательный массив» . PHP_EOL ;
$nonsequential = array( 1 => «foo» , 2 => «bar» , 3 => «baz» , 4 => «blong» );
var_dump (
$nonsequential ,
json_encode ( $nonsequential )
);


echo PHP_EOL . «Последовательный массив с одним удаленным индексом» . PHP_EOL ;
unset( $sequential [ 1 ]);
var_dump (
$sequential ,
json_encode ( $sequential )
);
?>

Результат выполнения данного примера:

Примечания

В случае ошибки кодирования, можно использовать json_last_error() для определения точной ошибки.

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

Как и эталонный кодировщик JSON, json_encode() будет создавать JSON в виде простого значения (т.е. не объект и не массив), если ему переданы string , integer , float или boolean в качестве входящего значения value . Большинство декодеров воспринимают эти значения как правильный JSON, но некоторые нет, потому что спецификация неоднозначна на этот счет.

Всегда проверяйте, что ваш JSON декодер может правильно обрабатывать данные, которые вы создаете с помощью json_encode() .

Смотрите также

  • JsonSerializable
  • json_decode() — Декодирует JSON строку
  • json_last_error() — Возвращает последнюю ошибку
  • serialize() — Генерирует пригодное для хранения представление переменной

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, который позволяет обмениваться данными браузеру и серверу без необходимости перезагружать страницу.

  1. Пользователь нажимает миниатюру продукта в онлайн магазине.
  2. JavaScript, выполняющийся на браузере, генерирует запрос AJAX к скрипту PHP, запущенному на сервере, передавая ID выбранного продукта.
  3. Скрипт PHP получает название продукта, описание, цену и другую информацию из базы данных. Затем составляет из данных строку JSON и отсылает ее браузеру.
  4. 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 Свойство с именем «orderId» и целочисленным значением 12345 «shopperName»: «Ваня Иванов» свойство с именем «shopperName» и строковым значением «Ваня Иванов» «shopperEmail»: «johnsmith@example.com» Свойство с именем «shopperEmail» и строковым значением «ivanov@example.com» «contents»: [ . ] Свойство с именем «contents» , значение которого является массивом «orderCompleted»: true Свойство с именем «orderCompleted» и логическим значением true
  • В массиве «contents» есть 2 объекта, представляющие отдельные позиции в заказе. Каждый объект содержит 3 свойства: productID , productName , и quantity .

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

Мы создали переменную 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:

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

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

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

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

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

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

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

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

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

Заключение

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

Данный урок подготовлен для вас командой сайта ruseller.com
Источник урока: www.elated.com/articles/json-basics/
Перевел: Сергей Фастунов
Урок создан: 12 Августа 2011
Просмотров: 442934
Правила перепечатки

5 последних уроков рубрики «Разное»

Как разместить свой сайт на хостинге? Правильно выбранный хороший хостинг — это будущее Ваших сайтов

Проект готов, Все проверено на локальном сервере OpenServer и можно переносить сайт на хостинг. Вот только какую компанию выбрать? Предлагаю рассмотреть хостинг fornex.com. Отличное место для твоего проекта с перспективами бурного роста.

Разработка веб-сайтов с помощью онлайн платформы Wrike

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

20 ресурсов для прототипирования

Подборка из нескольких десятков ресурсов для создания мокапов и прототипов.

Топ 10 бесплатных хостингов

Небольшая подборка провайдеров бесплатного хостинга с подробным описанием.

Быстрая заметка: массовый UPDATE в MySQL

Ни для кого не секрет как в MySQL реализовать массовый INSERT, а вот с UPDATE-ом могут возникнуть сложности. Чтобы не прибегать к манипуляциям события ON_DUPLICATE можно воспользоваться специальной конструкцией CASE … WHEN … THEN.

Добавить комментарий