Формат JSON представляет из себя упорядоченную, определенным образом, информацию. Это альтернатива формату XML, с более минималистической структурой данных. О том, как прочитать эти данные через PHP.
JSON можно прочитать с помощью очень многих языков программирования. Здесь мы будем разбирать пример чтения содержимого файла посредством PHP.
Как прочитать содержимое файла
В переменную f_json заключаем адрес файла JSON:
1 |
$f_json = 'http://ploshadka.net/wp-content/uploads/3284/ploshadka.net.json'; |
Затем этот файл достаём по адресу указанному в f_json:
1 |
$json = file_get_contents("$f_json"); |
Если заглянуть в JSON файл напрямую, можно увидеть следующие данные:
1 | {"response":{"items":[{"id":"1331","title_one":"Данные заголовка один","title_two":"Данные заголовка два","Год":"2056","Items":"items-1, items-2, items-3, items-4"}]}} |
Иногда в файле данные выглядят так:
1 |
"{\"response\":{\"items\":[{\"id\":\"1331\",\"title_one\":\"\u0414\u0430\u043d\u043d\u044b\u0435 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430 \u043e\u0434\u0438\u043d\",\"title_two\":\"\u0414\u0430\u043d\u043d\u044b\u0435 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430 \u0434\u0432\u0430\",\"\u0413\u043e\u0434\":\"2056\",\"Items\":\"items-1, items-2, items-3, items-4\"}]}}\n"string(395) ""{\"response\":{\"items\":[{\"id\":\"1331\",\"title_one\":\"\u0414\u0430\u043d\u043d\u044b\u0435 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430 \u043e\u0434\u0438\u043d\",\"title_two\":\"\u0414\u0430\u043d\u043d\u044b\u0435 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430 \u0434\u0432\u0430\",\"\u0413\u043e\u0434\":\"2056\",\"Items\":\"items-1, items-2, items-3, items-4\"}]}}\n"" |
Эта «неправильная» кодировка является символами Unicode, записанные в восьмибитной кодировке.
Просмотрим содержимое файла JSON в браузере:
1 |
var_dump(json_decode($json)); |
В данном случае будет отдан массив в одну строчку. Ниже строчка разбита, для наглядности, на несколько строк.
1 2 3 4 5 6 7 8 9 |
object(stdClass)#3896 (1) { ["response"]=> object(stdClass)#3324 (1) { ["items"]=> array(1) { [0]=> object(stdClass)#3330 (5) { ["id"]=> string(4) "1331" ["title_one"]=> string(40) "Данные заголовка один" ["title_two"]=> string(38) "Данные заголовка два" ["Год"]=> string(4) "2056" ["Items"]=> string(34) "items-1, items-2, items-3, items-4" } } } } |
Для чтения этих данных декодируем строки файла:
1 |
$obj = json_decode($json,true); |
Теперь выведем объекты в этом файле. Например, мы хотим достать заголовок один, который находится под ключевым атрибутом title_one. Для этого воспользуемся следующей командой:
1 |
$title_one = $obj['response']['items'][0]['title_one']; |
Мы сохранили данные в переменную title_one. Теперь с ними можно делать всё что угодно. Например, вывести её:
1 |
echo $title_one; |
В этом случае будет показано:
1 | Данные заголовка один |
Как получить значение через запятую в массиве данных файла JSON
Пример посложнее. Мы хотим достать отдельные данные для «items-1, items-2, items-3, items-4». Чтобы каждое значение было схвачено в отдельную переменную.
Для этого, сначала мы обратимся к этой строке:
1 |
$json_items = $obj['response']['items'][0]['Items']; |
Теперь требуется преобразовать данные из строки в массив. Воспользуемся функцией разбиения строки в PHP:
1 |
$arr = explode(", ", $json_items); |
Теперь мы можем вывести отдельные элементы так:
1 2 3 4 |
echo $arr[0]; echo $arr[1]; echo $arr[2]; echo $arr[3]; |
Причем первое значение выводится с параметром [0]. Так исторически сложилось.
Ошибки при выводе JSON
Если вы сталкиваетесь с командой вроде:
Значит неправильно указан путь к данным.