преобразование строки в json php
(PHP 5 >= 5.2.0, PECL json >= 1.2.0, PHP 7)
json_decode — Декодирует JSON строку
Описание
Принимает закодированную в JSON строку и преобразует ее в переменную PHP.
Список параметров
json строка ( string ) для декодирования.
Эта функция работает только со строками в UTF-8 кодировке.
И хотя это надмножество согласуется с расширенным определением «JSON текста» из новых » RFC 7159 (который старается заменить собой RFC 4627) и » ECMA-404, это все равно может приводить к проблемам совместимости со старыми парсерами JSON, которые строго придерживаются RFC 4627 с кодированием скалярных значений.
Указывает глубину рекурсии.
Битовая маска опций декодирования JSON. В настоящий момент поддерживается только JSON_BIGINT_AS_STRING (по умолчанию большие целые числа приводятся к числам с плавающей запятой (float))
Возвращаемые значения
Примеры
Пример #1 Пример использования json_decode()
Результат выполнения данного примера:
Пример #2 Доступ к свойствам объектов с неправильными именами
Доступ к элементам объекта, которые содержат символы недопустимые согласно соглашению об именах PHP (т.е. дефис), может производиться путем обрамления имени элемента фигурными скобками и апострофами.
Пример #3 Распространенная ошибка при использовании json_decode()
// Следующие строки являются валидным кодом JavaScript, но не валидными JSON данными
Пример #4 Ошибки с глубиной вложенных объектов ( depth )
Результат выполнения данного примера:
Пример #5 json_decode() с большими целыми числами
Результат выполнения данного примера:
Примечания
Спецификация JSON не тоже самое, что и JavaScript, но является его частью.
В случае ошибки декодирования можно использовать json_last_error() для определения ее причины.
Список изменений
Смотрите также
json_decode
(PHP 5 >= 5.2.0, PHP 7, PHP 8, PECL json >= 1.2.0)
json_decode — Декодирует строку JSON
Описание
Принимает закодированную в JSON строку и преобразует её в переменную PHP.
Список параметров
Строка ( string ) json для декодирования.
Эта функция работает только со строками в кодировке UTF-8.
PHP реализует надмножество JSON, который описан в первоначальном » RFC 7159.
Максимальная глубина вложенности структуры, для которой будет производиться декодирование.
Возвращаемые значения
Список изменений
Примеры
Пример #1 Примеры использования json_decode()
Результат выполнения данного примера:
Пример #2 Доступ к свойствам объектов с неправильными именами
Доступ к элементам объекта, которые содержат символы, недопустимые в соответствии с соглашением об именах PHP (то есть дефис), может быть выполнен путём обрамления имени элемента фигурными скобками и апострофами.
Пример #3 Распространённая ошибка при использовании json_decode()
// Следующие строки являются валидным кодом JavaScript, но не валидными JSON-данными
Пример #4 Ошибки с глубиной вложенных объектов ( depth )
Результат выполнения данного примера:
Пример #5 json_decode() с большими целыми числами
Результат выполнения данного примера:
Примечания
В случае возникновения ошибки декодирования можно использовать json_last_error() для определения её причины.
Смотрите также
Примеры использования JSON-формата на PHP и JavaScript
Что такое JSON
Синтаксис JSON на примерах
Формат json обычно записывается в 2-х вариантах:
1. Последовательность значений. Например, последовательность 10, 15 и «test» в формате JSON будут выглядеть так:
Немного более сложный пример:
PHP функции для работы с JSON-форматом
В языке php начиная с версии 5.2. есть всего 4 функции:
В основном по-большей части, используются всего две функции: 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-строки в массив с цифрами:
Пример преобразования (сериализации) объекта в 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-х настроек, можно просто в таблице со списком пользователей сделать текстовый столбец, в который помещать данные настроек пользователя. Тогда запрос обновления настроек, может например, быть таким:
В формате JSON, можно так же, например, записать в базу данных какие опции товаров выбрал покупатель.
Впринципе, можно даже и всё содержимое корзины записать в формате JSON, например, так:
В обычном не древовидном виде эта JSON-строка будет такой:
Таким образом, как видно из примеров, в формате JSON можно хранить и передавать практически любую информацию.
How to convert a string to JSON object in PHP
I have the following result from an SQL query:
It is currently a string in PHP. I know it’s already in JSON form, is there an easy way to convert this to a JSON object?
I need it to be an object so I can add an extra item/element/object like what «Coords» already is.
4 Answers 4
What @deceze said is correct, it seems that your JSON is malformed, try this:
Use json_decode to convert String into Object ( stdClass ) or array: http://php.net/manual/en/function.json-decode.php
[edited]
I did not understand what do you mean by «an official JSON object», but suppose you want to add content to json via PHP and then converts it right back to JSON?
assuming you have the following variable:
You should convert it to Object (stdClass):
But working with stdClass is more complicated than PHP-Array, then try this (use second param with true ):
$manage = json_decode($data, true);
adding an item:
remove first item:
any chance you want to save to json to a database or a file:
I hope I have understood your question.
To convert a valid JSON string back, you can use the json_decode() method.
To convert it back to an object use this method:
And to convert it to a associative array, set the second parameter to true :
By the way to convert your mentioned string back to either of those, you should have a valid JSON string. To achieve it, you should do the following:
json_encode
(PHP 5 >= 5.2.0, PHP 7, PHP 8, PECL json >= 1.2.0)
json_encode — Возвращает JSON-представление данных
Описание
На кодирование влияет параметр flags и, кроме того, кодирование значений типа float зависит от значения serialize_precision.
Список параметров
Функция работает только с кодировкой UTF-8.
PHP реализует надмножество JSON, который описан в первоначальном » RFC 7159.
Устанавливает максимальную глубину. Должен быть больше нуля.
Возвращаемые значения
Возвращает строку ( string ), закодированную JSON или false в случае возникновения ошибки.
Список изменений
Примеры
Пример #1 Пример использования json_encode()
Результат выполнения данного примера:
Пример #2 Пример использования json_encode() с опциями
Результат выполнения данного примера:
Пример #3 Пример использования опции JSON_NUMERIC_CHECK
Результатом выполнения данного примера будет что-то подобное:
Пример #4 Пример с последовательными индексами, начинающимися с нуля, и непоследовательными индексами массивов
Результат выполнения данного примера:
Пример #5 Пример использования опции JSON_PRESERVE_ZERO_FRACTION
Результат выполнения данного примера:
Примечания
в случае возникновения ошибки кодирования можно использовать json_last_error() для определения точной ошибки.
При кодировании массива в случае, если его индексы не являются последовательными числами от нуля, то все индексы кодируются в строковые ключи для каждой пары индекс-значение.
Смотрите также
User Contributed Notes 39 notes
This isn’t mentioned in the documentation for either PHP or jQuery, but if you’re passing JSON data to a javascript program, make sure your program begins with:
Are you sure you want to use JSON_NUMERIC_CHECK, really really sure?
Just watch this usecase:
// International phone number
json_encode (array( ‘phone_number’ => ‘+33123456789’ ), JSON_NUMERIC_CHECK );
?>
And then you get this JSON:
Maybe it makes sense for PHP (as is_numeric(‘+33123456789’) returns true), but really, casting it as an int?!
So be careful when using JSON_NUMERIC_CHECK, it may mess up with your data!
A note of caution: If you are wondering why json_encode() encodes your PHP array as a JSON object instead of a JSON array, you might want to double check your array keys because json_encode() assumes that you array is an object if your keys are not sequential.
SOLUTION: Use array_values() to re-index the array.
This is intended to be a simple readable json encode function for PHP 5.3+ (and licensed under GNU/AGPLv3 or GPLv3 like you prefer):
I came across the «bug» where running json_encode() over a SimpleXML object was ignoring the CDATA. I ran across http://bugs.php.net/42001 and http://bugs.php.net/41976, and while I agree with the poster that the documentation should clarify gotchas like this, I was able to figure out how to workaround it.
You need to convert the SimpleXML object back into an XML string, then re-import it back into SimpleXML using the LIBXML_NOCDATA option. Once you do this, then you can use json_encode() and still get back the CDATA.
Although this is not documented on the version log here, non-UTF8 handling behaviour has changed in 5.5, in a way that can make debugging difficult.
Passing a non UTF-8 string to json_encode() will make the function return false in PHP 5.5, while it will only nullify this string (and only this one) in previous versions.
PHP 5.5 has it right of course (if encoding fails, return false) but its likely to introduce errors when updating to 5.5 because previously you could get the rest of the JSON even when one string was not in UTF8 (if this string wasn’t used, you’d never notify it’s nulled)
If you are planning on using this function to serve a json file, it’s important to note that the json generated by this function is not ready to be consumed by javascript until you wrap it in parens and add «;» to the end.
It took me a while to figure this out so I thought I’d save others the aggravation.
( ‘Content-Type: text/javascript; charset=utf8’ );
header ( ‘Access-Control-Allow-Origin: http://www.example.com/’ );
header ( ‘Access-Control-Max-Age: 3628800’ );
header ( ‘Access-Control-Allow-Methods: GET, POST, PUT, DELETE’ );
This function is more accurate and faster than, for example, that one:
http://www.php.net/manual/ru/function.json-encode.php#89908
(RU: эта функция работает более точно и быстрее, чем указанная выше).
Please note that there was an (as of yet) undocumented change to the json_encode() function between 2 versions of PHP with respect to JSON_PRETTY_PRINT:
In version 5.4.21 and earlier, an empty array [] using JSON_PRETTY_PRINT would be rendered as 3 lines, with the 2nd one an empty (indented) line, i.e.:
«data»: [
In version 5.4.34 and above, an empty array [] using JSON_PRETTY_PRINT would be rendered as exactly [] at the spot where it occurs, i.e.
«data: [],
This is not mentioned anywhere in the PHP changelist and migration documentations; neither on the json_encode documentation page.
This is very useful to know when you are parsing the JSON using regular expressions to manually insert portions of data, as is the case with my current use-case (working with JSON exports of over several gigabytes requires sub-operations and insertion of data).
Solution for UTF-8 Special Chars.
If you need to force an object (ex: empty array) you can also do:
Be careful with floating values in some locales (e.g. russian) with comma («,») as decimal point. Code:
Which is NOT a valid JSON markup. You should convert floating point variable to strings or set locale to something like «LC_NUMERIC, ‘en_US.utf8′» before using json_encode.
Here is a bit more on creating an iterator to get at those pesky private/protected variables:
class Kit implements IteratorAggregate <
If I want to encode object whith all it’s private and protected properties, then I implements that methods in my object:
Found that much more simple than regular expressions with PHP serialized objects.
For anyone who would like to encode arrays into JSON, but is using PHP 4, and doesn’t want to wrangle PECL around, here is a function I wrote in PHP4 to convert nested arrays into JSON.
I don’t make a claim that this function is by any means complete (for example, it doesn’t handle objects) so if you have any improvements, go for it.
// We first copy each key/value pair into a staging array,
// formatting each key and value properly as we go.