Json decode аналог php

JSON в PHP: примеры json_encode, json_decode, работа с кириллицей и utf-8

Подробную документацию всегда можно найти по этой ссылке:

Кодирование при помощи функции json_encode

Функция работает только с кодировкой UTF-8.

Рассмотрим простой пример:

$array = [ 'one' => 1, 'two' => 2, ]; $json = json_encode($array); echo $json;

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

Как видим ассоциативный массив превратился в обычную json строку.

$array = [ 'Ключ 1' => 'Значение 1', 'Ключ 2' => 'Значение 2', 'Ключ 3' => 'Значение 3', ]; $json = json_encode($array); echo $json;

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

Что произошло c кириллицей?

Дело в том, что по умолчанию многобайтовые символы Unicode кодируются как \uXXXX. При раскодировании функцией json_decode они преобразуются в нормальные строки. В некоторых случаях мы можем захотеть избежать этого экранирования, например, чтобы посмотреть как выглядит наш JSON.

Для этого воспользуемся флагом JSON_UNESCAPED_UNICODE:

$json = json_encode($array, JSON_UNESCAPED_UNICODE); echo $json;

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

$json = json_encode($array, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT); echo $json;

Мы разобрались, как кодировать наши переменные в формат JSON при помощи json_encode.

Другие предопределенные константы с префиксом JSON_ https://www.php.net/manual/ru/json.constants.php

Декодирование c помощью json_decode

Допустим у нас есть строка в формате JSON. Возьмем ее из предыдущего примера:

$var = json_decode($json); var_dump($var);

У нас получился результат:

object(stdClass)#117 (3) < ["Ключ 1"]=>string(18) "Значение 1" ["Ключ 2"]=> string(18) "Значение 2" ["Ключ 3"]=> string(18) "Значение 3" >

Видим, что это тип переменной stdClass. То есть несмотря на то, что мы изначально кодировали в json обычный ассоциативный массив, в результате декодирования у нас получился объект. Подробнее об этом поведении написано здесь: https://phpstack.ru/php/json_decode-kak-perevesti-rezultat-v-massiv.html

Как нам все таки получить обычный массив? Нужно в json_decode передать вторым параметром true:

$var = json_decode($json, true); var_dump($var);
array(3) < ["Ключ 1"]=>string(18) "Значение 1" ["Ключ 2"]=> string(18) "Значение 2" ["Ключ 3"]=> string(18) "Значение 3" >

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

Обработка ошибок

В случае ошибки, эти функции просто молча возвращают null.

Мы можем проверить, что нам вернулось null и посмотреть какая произошла ошибка следующим образом:

Иногда нам может быть полезно не молчаливо возвращать null, а выкинуть Exception и обработать его. PHP >7.3 предоставляет нам такую возможность.

Это можно сделать при помощи флага JSON_THROW_ON_ERROR

Теперь результат этого кода JsonException с сообщением Syntax error

Более подробно про обработку ошибок JSON:

Как вывести JSON ответ на ajax запрос

Когда к нашему PHP скрипту обращается например javascript с ajax запросом, для того, чтобы подгрузить на страницу новые данные, то часто возникает необходимость ответить в формате JSON.

Для того, чтобы это сделать, нужно отправить заголовок Content-type:application/json;charset=utf-8 и просто вывести строку с закодированными данными.

Содержимое файла text_json.php

$array = ['data' => 'ваши данные']; $jsonString = json_encode($array); // переводим данные в JSON строку // отправляем заголовок, который позволит клиенту определить, // что возвращается ответ в формате JSON header('Content-type:application/json;charset=utf-8'); echo $jsonString; // выводим JSON строку exit(); // прекращаем выполнение скрипта

Тем временем в javascript мы можем обратиться к нашему php скрипту таким образом:

Отправка JSON запросов на другой сервер.

Некоторые интернет сервисы принимает запросы в формате JSON. Давайте рассмотрим простой пример как отправить такой запрос.

// httpbin.org - это такой интернет сервис, который помогает нам тестировать запросы. $url = 'https://httpbin.org/anything'; // формируем массив $post_data = [ 'ключ' => 'значение' ]; // преобразуем массив в json $data_json = json_encode($post_data); $curl = curl_init(); curl_setopt($curl, CURLOPT_HTTPHEADER, ['Content-Type: application/json','Content-Length: ' . strlen($data_json)]); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl, CURLOPT_VERBOSE, 1); curl_setopt($curl, CURLOPT_POSTFIELDS, $data_json); curl_setopt($curl, CURLOPT_URL, $url); curl_setopt($curl, CURLOPT_POST, true); $response = curl_exec($curl); // сервис вернул нам строку в формате json, давайте ее раскодируем применив знания из этой статьи $result = json_decode($response, true); var_dump($result);

Спасибо за внимание. Если после прочтения у вас остались вопросы — напишите какие.

Источник

Форум PHP программистов ► PHP практикум ► GD, XML, CURL, PEAR & PECL

Ситуация такая, на хостинге не оказалось расширения php json.
Нужен аналог json_decode.
На входе строка в формате json на выходе ассоциативный массив.

У кого есть код или линк, поделитесь, буду благодарен.

Понимаю что пишется в 10 строчек, но в данный момент просто лень это делать=)

function json2array($json)

if(get_magic_quotes_gpc())
$json = stripslashes($json);
>
$json = substr($json, 1, —1);

$json = str_replace(array(«:», «, «[«, «>», «]»), array(«=>», «array(«, «array(«, «)», «)»), $json);

@eval(«\$json_array = array( );»);

return $json_array;

>
В итоге Igbinary сжимает данные в 2,5 раза лучше, чем serialize.

Float
Serialize Igbinary /
Time ser 1 388 ms 74 ms 18,9
Time unser 868 ms 86 ms 10,1
Size 5 650 1 085 5,2
Bytes / El 56,5 10,9

Integer
Serialize Igbinary /
Time ser 167 ms 82 ms 2,0
Time unser 111 ms 100 ms 1,1
Size 1 737 706 2,5
Bytes / El 17,4 7,1

Integer Small
Serialize Igbinary /
Time ser 143 ms 71 ms 2,0
Time unser 99 ms 83 ms 1,2
Size 991 406 2,4
Bytes / El 9,9 4,1

Integer Big
Serialize Igbinary /
Time ser 143 ms 75 ms 1,9
Time unser 116 ms 84 ms 1,4
Size 1 798 706 2,5
Bytes / El 18,0 7,1

Сериализовались массивы из 100 элементов (по 1000 циклов на тест).
Integer – числа по рандому, Integer Small – числа до 100, Integer Big – числа более 1 000 000 000.

Источник

Alternative for json_decode and json_encode

if(!function_exists(‘json_encode’))
function json_encode($a=false)
// Some basic debugging to ensure we have something returned
if (is_null($a)) return ‘null’;
if ($a === false) return ‘false’;
if ($a === true) return ‘true’;
if (is_scalar($a))
if (is_float($a))
// Always use ‘.’ for floats.
return floatval(str_replace(‘,’, ‘.’, strval($a)));
>
if (is_string($a))
static $jsonReplaces = array(array(‘\\’, ‘/’, «\n», «\t», «\r», «\b», «\f», ‘»‘), array(‘\\\\’, ‘\\/’, ‘\\n’, ‘\\t’, ‘\\r’, ‘\\b’, ‘\\f’, ‘\»‘));
return ‘»‘ . str_replace($jsonReplaces[0], $jsonReplaces[1], $a) . ‘»‘;
>
else
return $a;
>
$isList = true;
for ($i = 0, reset($a); true; $i++) if (key($a) !== $i)
$isList = false;
break;
>
>
$result = array();
if ($isList)
foreach ($a as $v) $result[] = json_encode($v);
return ‘[‘ . join(‘,’, $result) . ‘]’;
>
else
foreach ($a as $k => $v) $result[] = json_encode($k).’:’.json_encode($v);
return »;
>
>
>

json_decode

Rate this:

Share this:

Like this:

One thought on “ Alternative for json_decode and json_encode ”

Hi there! Thanks for putting this online. I’d like to use these two functions for an open source package, to ensure compatibility with PHP < 5.2.0. Could you tell me which license applies to this code? Thanks! Like Like

Источник

Битрикс. Аналоги стандартных PHP-функций

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

Функция htmlspecialchars()

\Bitrix\Main\Text\String::htmlEncode()

Функция htmlspecialchars() предназначена для преобразования специальных символов ( & , < , >, » ) в HTML-сущности ( & , < , > , " ). После этого эти спец.символы можно использовать в HTML-коде, они больше не будут иметь особого значения. С выходом PHP версии 5.4 изменилось значение по умолчанию третьего параметра. Дефолтным значением стала кодировка UTF-8.

Для Битрикс это стало проблемой по той причине, что если передавать строку с нелатинскими символами в иной кодировке, не передавая параметр кодировки, то функция возвращала пустую строку. Проблема ощутимая, т.к. в системе данная функция используется довольно часто. Поэтому была добавлена новая функция htmlspecialcharsbx() в главный модуль начиная с версии 11.5.9. Новая функция работает на основе все той же htmlspecialchars() :

function htmlspecialcharsbx($string, $flags = ENT_COMPAT) return htmlspecialchars($string, $flags, (defined("BX_UTF") ? "UTF-8" : "ISO-8859-1")); >
class String  public static function htmlEncode($string, $flags = ENT_COMPAT)  return htmlspecialchars($string, $flags, (defined("BX_UTF") ? "UTF-8" : "ISO-8859-1")); > >

Таким образом, если константа BX_UTF была определена перед обращением к функции, то будет использоваться кодировка UTF-8, в противном случае — ISO-8859-1.

Функции json_encode() и json_decode()

Функции json_encode() и json_decode() пребразуют массив PHP в строку json-формата и обратно, работают только с кодировкой UTF-8. Заставить их работать с кодировкой windows-1251 — не самая легкая задача. Методы Json::encode() и Json::decode() решают данную проблему. А т.к. сейчас большинство сайтов работают на технологии AJAX, при написании модулей они позволят отказаться от изобретения велосипеда.

Функции strtoupper() и strtolower()

Функции strtoupper() и strtolower() преобразуют строку к верхнему или нижнему регистру соответственно, но не работают с русским текстом в кодировке UTF-8. А функции Битрикс ToUpper() и ToLower() — работают.

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.

Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.

  • 1С:Предприятие (31)
  • API (29)
  • Bash (43)
  • CLI (99)
  • CMS (139)
  • CSS (50)
  • Frontend (75)
  • HTML (66)
  • JavaScript (150)
  • Laravel (72)
  • Linux (146)
  • MySQL (76)
  • PHP (125)
  • React.js (66)
  • SSH (27)
  • Ubuntu (68)
  • Web-разработка (509)
  • WordPress (73)
  • Yii2 (69)
  • БазаДанных (95)
  • Битрикс (66)
  • Блог (29)
  • Верстка (43)
  • ИнтернетМагаз… (84)
  • КаталогТоваров (87)
  • Класс (30)
  • Клиент (27)
  • Ключ (28)
  • Команда (68)
  • Компонент (60)
  • Конфигурация (62)
  • Корзина (32)
  • ЛокальнаяСеть (28)
  • Модуль (34)
  • Навигация (31)
  • Настройка (140)
  • ПанельУправле… (29)
  • Плагин (33)
  • Пользователь (26)
  • Практика (99)
  • Сервер (74)
  • Событие (27)
  • Теория (105)
  • Установка (66)
  • Файл (47)
  • Форма (58)
  • Фреймворк (192)
  • Функция (36)
  • ШаблонСайта (68)

Источник

Читайте также:  Открыть php через denwer
Оцените статью