Функция PHP json_encode преобразует переданные ей данные в строку JSON, которая затем может быть выведена в переменную JavaScript. В этом топике мы поработаем с одноуровневыми массивами, а в следующем материале мы разберем работы json_encode с многомерными массивами и скалярными значениями.

Функция PHP json_encode возвращает строку, содержащую JSON-эквивалент переданного ей значения, как показано на примере массива с числовым индексом:

<?php
$ar = array('apple', 'orange', 'banana', 'strawberry');
echo json_encode($ar); // ["apple","orange","banana","strawberry"]
?>

Вы можете передать строку JSON, выведенную json_encode, в переменную JavaScript следующим образом:

<script type="text/javascript">
// pass PHP variable declared above to JavaScript variable
var ar = <?php echo json_encode($ar) ?>;
</script>

Массив PHP с числовым индексом преобразуется в литерал массива в строке JSON. Опция JSON_FORCE_OBJECT может быть использована, если вы хотите, чтобы массив был выведен в виде объекта:

<?php
echo json_encode($ar, JSON_FORCE_OBJECT);
// {"0":"apple","1":"orange","2":"banana","3":"strawberry"} 
?>

Обратите внимание, что строка JSON не содержит пробелов, что может затруднить ее чтение. Для форматирования вывода JSON можно использовать опцию JSON_PRETTY_PRINT. Это продемонстрировано в примере с ассоциативным массивом ниже.

Функция json_encode также предоставляет другие возможности, которые перечислены и продемонстрированы в официальном руководстве PHP.

Пример ниже демонстрирует передачу массива PHP с числовым индексом, состоящего из строковых, числовых, булевых и нулевых значений, в json_encode. Мы передаем вывод json_encode в переменную JavaScript, и результатом является литерал массива:

<?php
$ar = array('apple', 'orange', 1, false, null, true, 3 + 5);
?>
<script type="text/javascript">
var ar = <?php echo json_encode($ar) ?>;
// ["apple","orange",1,false,null,true,8];
// access 4th element in array
alert( ar[3] ); // false
</script>

Для демонстрации доступа к элементам массива мы используем alert. Обратите внимание, что типы данных были сохранены, тогда как при старом подходе они преобразовывались в строки.

В другом примере показан вывод ассоциативного массива PHP в JavaScript с помощью json_encode. Обратите внимание, что ассоциативный массив PHP становится объектным литералом в JavaScript:

<?php
$book = array(
    "title" => "JavaScript: The Definitive Guide",
    "author" => "David Flanagan",
    "edition" => 6
);
?>
<script type="text/javascript">
var book = <?php echo json_encode($book, JSON_PRETTY_PRINT) ?>;
/* var book = {
    "title": "JavaScript: The Definitive Guide",
    "author": "David Flanagan",
    "edition": 6
}; */
alert(book.title);
</script>

Мы используем опцию JSON_PRETTY_PRINT в качестве второго аргумента json_encode для отображения вывода в удобочитаемом формате.

Для доступа к свойствам объекта можно использовать точечный синтаксис, как показано в приведенном выше alert-е, или синтаксис квадратных скобок: book['title'].

Что насчет JSON.parse?

Возможно, вы заметили, что JSON.parse от JavaScript не был применен к результату в этом примере. Хотя не всегда необходимо прогонять результаты json_encode через парсер на стороне JavaScript, но возможно вы захотите это сделать. Мы больше раскроем тему о том, когда и как использовать JSON.parse в следующих топиках.

Оцените, пожалуйста

Нажмите на звезду, чтобы оценить!

Средняя оценка 5 / 5. Количество оценок: 1

Оценок пока нет. Поставьте оценку первым.

Javascript
PHP

Статьи # #