PHP и JSON: легко ли их подружить?
Вот здесь я уже упоминал об удобстве "родного" для Javascript и AJAX-приложений текстового формата JSON.
Легко ли "подружить" JSON и PHP? В принципе, да, потому что в стандарте языка имеются функции json_decode и json_encode, которые могут, соответственно, получить строку JSON и преобразовать её в объект (или массив) PHP и наоборот, преобразовать объект, содержащий данные JSON (в том числе, массив) в строку с JSON-представлением.
Эти функции работают, начиная с версии PHP 5.2, то есть, практически на любом современном хостинге.
Данные должны быть обязательно в Юникоде (UTF-8).
Ключ и значение любой JSON-записи в исходных данных должны помещаться в "двойные кавычки", 'одинарные' использовать нельзя.
Увы, если в файле JSON есть символы национальных алфавитов, версии PHP 5.2 может и не хватить.
Опции JSON_UNESCAPED_UNICODE
(не кодировать многобайтовые символы Unicode к виду \uXXXX
)
и JSON_UNESCAPED_SLASHES
(не экранировать слеши)
появились в PHP 5.4, так что на локальном хосте должна быть версия не ниже.
Далее показан небольшой скрипт, который берёт JSON-данные из файла с именем data.json
,
расположенного в его текущей папке, и преобразует их в массив PHP, который затем рекурсивно выводится в браузер.
После этого к массиву применяется "обратное действие" и он пакуется в строку, содержащую данные JSON. Листинг показывает также элементарную обработку ошибок чтения JSON-данных на PHP.
Файл data.json
- тот же самый, что в исходной заметке. Предполагается, что в папку скрипта также помещён файл .htaccess с директивой
AddDefaultCharset utf-8
Код .php самого скрипта:
<?php $data = file_get_contents ('data.json'); if ($data === false) { echo 'Файл data.json не найден'; exit (); } $json = json_decode($data, true); //Вернуть массив с JSON-данными if (json_last_error() === JSON_ERROR_NONE) { //Нет ошибки - вывести данные рекурсивно array_walk_recursive ($json, function ($item,$key){ echo "\"$key\": \"$item\"<br>\n"; }); } else { //Сообщить об ошибке и выйти echo 'Ошибка чтения JSON: '.json_last_error().','.json_last_error_msg()."<br>\n"; exit (); } echo json_encode ($json,JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES); //Вывести JSON-объект как строку с кириллицей, нужен PHP 5.4 и выше ?>
Скачать архив .zip с папкой скрипта jsonphp (1 Кб)
29.12.2017, 12:14 [2590 просмотров]