Изучаем PHP 7. №23. Работа с .json файлами.

Работа с .json файлами.
JSON — текстовый файл описывающий данные. В котором массивы содержаться в [ ], а объекты в { } и в них все данные представлены в виде имя:значение.

Имя всегда указывается в кавычках «имя», а значение может быть таких видов:
— Числовое — целые или дробные с точкой.
— Строковое — текст в двойных кавычках.
— Логическое — true или false.
— Нулевое — null
— Другие (вложенные) массивы обернутые в [ ].
— Другие (вложенные) объекты обернутые в { }.
Значение одного уровня разделяются запятыми.

При всем этом объект состоит из:
{
«имя1» : «значение1»,
«имя2» : «значение2»,
«имя3» : «значение3»
}

А массив из:
[
«Значение1»,
«Значение2»,
«Значение3»
]

Вот как выглядит простой файл user.json:

{
    "firstName" : "Виталий",
    "lastName" : "Слюсар",
    "site" : "http://slusar.su",
    "address":{
        "country" : "Украина",
        "city" : "Днепропетровск",
        "homeNumber" : 22
    },
    "phoneNumbers" : [
        "+380 66 12 34 567",
        "+380 98 88 88 868"
    ]

}

Для работы с JSON в php имеются функции:
json_decode() — преобразовывает строку в объект или массив.
json_encode() — преобразовывает объект или массив в строку.
json_last_eror() — Возвращает результат преобразования.

Также рассмотрим такие функции как:
file_get_contents()Читает содержимое файла в строку

Возможные ошибки при работе с json:
JSON_ERROR_NONE — Ошибок нет
JSON_ERROR_DEPTH — Достигнута максимальная глубина стека
JSON_ERROR_STATE_MISMATCH — Неверный или не корректный JSON
JSON_ERROR_CTRL_CHAR — Ошибка управляющего символа, возможно неверная кодировка
JSON_ERROR_SYNTAX — Синтаксическая ошибка
JSON_ERROR_UTF8 — Некорректные символы UTF-8, возможно неверная кодировка
JSON_ERROR_RECURSION — Одна или несколько зацикленных ссылок в кодируемом значении
JSON_ERROR_INF_OR_NAN — Одно или несколько значений NAN или INF в кодируемом значении
JSON_ERROR_UNSUPPORTED_TYPE — Передано значение с неподдерживаемым типом

 

Вот так мы считываем информацию из файла:

<?php
// Загружаем данные из файла в строку
$string = file_get_contents("user.json");

// Превращаем строку в объект
$data = json_decode($string);

// Отлавливаем ошибки возникшие при превращении
switch (json_last_error()) {
  case JSON_ERROR_NONE:
    $data_error = '';
    break;
  case JSON_ERROR_DEPTH:
    $data_error = 'Достигнута максимальная глубина стека';
    break;
  case JSON_ERROR_STATE_MISMATCH:
    $data_error = 'Неверный или не корректный JSON';
    break;
  case JSON_ERROR_CTRL_CHAR:
    $data_error = 'Ошибка управляющего символа, возможно верная кодировка';
    break;
  case JSON_ERROR_SYNTAX:
    $data_error = 'Синтаксическая ошибка';
    break;
  case JSON_ERROR_UTF8:
    $data_error = 'Некорректные символы UTF-8, возможно неверная кодировка';
    break;	
  default:
    $data_error = 'Неизвестная ошибка';
    break;
}

// Если ошибки есть, то выводим их
if($data_error !='') echo $data_error;

// Присваиваим данные переменным
$name = $data->firstName;
$lname = $data->lastName;
$site = $data->site;
$country = $data->address->country;
$city = $data->address->city;
$home = $data->address->homeNumber;
$phone1 = $data->phoneNumbers[1];
$phone2 = $data->phoneNumbers[2];

?>
<!-- Выводим информацию на экран -->
<p>Пользователь: <?=$name?> <?=$lname?> </p>
<p>Сайт: <a href="<?=$site?>"><?=$site?></a></p>
<p>Адрес: <?=$country?>, <?=$city?>, Дом:<?=$home?></p>
<p>Контакты: <?=$phone1?>, <?=$phone1?></p>

Вот что получиться:

Пользователь: Виталий Слюсар

Сайт: http://slusar.su

Адрес: Украина, Днепропетровск, Дом:22

Контакты: +380 98 88 88 868, +380 98 88 88 868

А вот так мы заносим данные в файл json:

<?php 
//Создаем массив с данными
$info = [
  "name" => "Костя",
  "lname" => "Тестов",
  "contacts" => [
    "phone" => "12345678",
    "mail" => "mail@mail.to",
    "skype" => "kost1999",
    "site" => "www.site.to",
  ],
];

// преобразовываем его в json вид
$json = json_encode($info);

// создаем новый файл
$file = fopen('new.json', 'w');

// и записываем туда данные
$write = fwrite($file,$json);

// проверяем успешность выполнения операции
if($write) echo "Данные успешно записаны!<br>";
else echo "Не удалось записать данные!<br>";

//закрываем файл
fclose($file);
?>

 

———————
http://merses.ru/news/flag_rodiny/1-0-7

5 идей о “Изучаем PHP 7. №23. Работа с .json файлами.

  1. Борис

    Скажите, пожалуйста, а записать информацию в json файл с помощью javascripta вообще реально, или для этих целей необходим именно серверный движок типа php?

  2. Владимир

    Добрый день!
    Для пробы скопировал весь, приведённый здесь код, создал файл user.json и вот что на экране, после запуска:
    firstName; $lname = $data->lastName; $site = $data->site; $country = $data->address->country; $city = $data->address->city; $home = $data->address->homeNumber; $phone1 = $data->phoneNumbers[1]; $phone2 = $data->phoneNumbers[2]; ?>

    Пользователь:

    Сайт:

    Адрес: , , Дом:

    Контакты: ,
    Т.е. данные из файла user.json не отображаются. Почему?

    1. Егор

      структура первого примера должна быть такой:
      1 файл user.json в нем должны быть данные которые описаны чуть выше.
      2 файл можно назвать как угодно он должен быть на php у меня 123.php
      Что бы работал пример нужно установить локальный сервер, я установил xampp
      Папка где хранятся файлы называется test_json
      test_json > 123.php user.json (вот такая структура файлов)
      в адресной строке браузера ввожу название localhost/test_json/123.php
      В скрипте нужно еще дописать
      header(‘Content-Type: text/html; charset= utf-8’);
      Что бы данные выводились не крякозябрами.
      А код приведенный выше, имеет ошибку на 46-ой строке.
      $phone2 = $data->phoneNumbers[2]; (эта переменная не нужна.)

  3. Егор

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

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.

×