Json encode

JSON encode decode is one of the most frequently required operations. In this article, we are going to see how to encode and decode JSON using PHP. PHP provides built-in functions to perform these two operations. Those are,

  1. json_encode()
  2. json_decode()

In this article, we are going to learn about these functions with suitable examples. Apart from these functions, a complete guide to handle JSON with PHP will be useful for you to know more about PHP JSON.

Encoding and Decoding 

Encoding and decoding is the pair of operations which is most importantly used in many application programming. Previously, we have seen about PHP functions url_encode() and url_decode() to perform the encoding and decoding a given URL.

Encoding is used to bundle data with respect to a particular format. This process will be required to preserve data consistency. Decoding is a reverse process which reverts encoded data back to its original form.


In PHP, json_encode() is used to convert PHP supported data type into JSON formatted string to be returned as a result of JSON encode operation. This function accepts the following set of arguments.

  • Data to be encoded.
  • Options with JSON encode constants to reflect effects on encoding behavior.
  • Depth limit for performing recursive encoding with nested levels of input.


Predefined JSON Constants

For PHP JSON encodes, the following list of constants will be used for the options parameter of json_encode() function.

    • JSON_HEX_TAG – Used to encode HTML content by replacing < and > symbol with u003C and u003E.
    • JSON_HEX_AMP – Used to encode data by replacing ampersand symbol (&) with u0026.
    • JSON_HEX_APOS – encode apostrophe (‘) with u0027.
    • JSON_HEX_QUOT – converts double quotes (“) into u0022.
    • JSON_FORCE_OBJECT – Using this, json_encode will return an object for given input data except for associative array.
    • JSON_NUMERIC_CHECK – PHP JSON encode function will return numbers as a result of encoding given a number with string data type.
    • JSON_BIGINT_AS_STRING – This constant is used to convert the log integer value as a string.
    • JSON_PRETTY_PRINT – pretty print is used for adding white space with the JSON formatted data.
    • JSON_UNESCAPED_SLASHES – It prevents from escaping slashes (/).
    • JSON_UNESCAPED_UNICODE – It prevents from escaping Unicode characters.

Example: PHP json_encode()

Now, it’s time to see an example PHP program to perform JSON encode. So, the following program handles few json_encode() function invoke with some of the available JSON encode constants as its option parameter.

<?php  $input_array = array("zero","one","two");  //returns ["zero","one","two"]   $str_json_format = json_encode($input_array);  print "JSON Formatted String:" . $str_json_format;  //returns {"0":"zero","1":"one","2":"two"}  $obj_json_format = json_encode($input_array, JSON_FORCE_OBJECT);  print "<br/><br/>JSON Object:" . $obj_json_format;  //returns [ "zero", "one", "two" ]  $strJsonFormat_with_space = json_encode($input_array, JSON_PRETTY_PRINT);  print "<br/><br/>JSON Formatted String with white space:" . $strJsonFormat_with_space;  ?>  


      • PHP json_encode() is used to convert any type of data except PHP resource data.
      • While using JSON_FORCE_OBJECT on encoding PHP array value, then each array element will be added to an index even though if input array doesn’t have any index.

Decoding JSON Data using PHP

This is the reverse operation of JSON encode, obviously used to convert JSON encoded data into its original PHP data type from where it is encoded initially.

For that, the second method json_decode() we have listed at the beginning of this article, will be used. This function accepts four arguments as listed below.

      • JSON formatted string to be decoded.
      • The Boolean value set based on which an associative array will be returned, if it is true.
      • depth limit.
      • options.

The third and fourth arguments are same as we have seen for json_encode(). The default value for depth limit is 512. And, the PHP supported constantly for option parameter of this function is, JSON_BIGINT_AS_STRING, which is used to convert long integers into float data.

Example: json_decode()

With the above PHP example program, we need to append the following lines.

...  $str_json_array_decoded = json_decode($str_json_format);  print "<br/><br/>Resultant decoded array from JSON array:<br/>";  print "<PRE>";  print_r($str_json_a.  

After that, on executing this code, te following output will be returned to the browser.

Resultant decoded array from JSON array:  Array  (   [0] => zero   [1] => one   [2] => two  )  Resultant decoded object data from JSON object:  stdClass Object  (   [0] => zero   [1] => one   [2] => two  )  Resultant decoded array data from JSON object:  Array  (   [0] => zero   [1] => one   [2] => two  )  


      • While passing associative array or object with key and value pair for json_decode(), the key value should be enclosed in double quotes. Otherwise, json_decode() will return NULL.

Download PHP JSON Encode Decode Source Code

↑ Back to Top


Ситуации возникают разные, на разных серверах и сайтах по-разному. Иногда нам необходимо передавать данные в JSON формате на сервер, но PHP 5.3 на нем нет, поэтому приходится придумывать способы корректной передачи данных, с заменой символов u00e9 (например) на русские буквы.

Разберем реальный рабочий пример.

Передаем массив данных:

$data_array = array('title'=>$title,'image'=>$image);

Функция, которая перерабатывает JSON данные.

function prepareUTF8($matches){
return json_decode('"'.$matches[1].'"');

Здесь мы преобразуем все нечитаемые символы в нормальные:

$data_format_json = preg_replace_callback('/((\u[01-9a-fA-F]{4})+)/', 'prepareUTF8',json_encode( $data_array ));

Подключаемся к базе данных на примере Joomla:

//ранее мы принимаем от ajax запроса переменную POST $id_item_our, и если её нет, то не добавляем в базу данные
if (isset($id_item_our))
$db = JFactory::getDbo();
$query = $db->getQuery(true);
->set(array($db->quoteName('our_data') . '=''.$data_format_json.'''))
->where(array($db->quoteName('id') . '='.$id_item_our.''));
$result = $db->query();
//выводим текст для AJAX запроса, после успешного добавления данных в БД.
echo "Благодарим";

Конечно, если Вы счастливый обладатель PHP 5.3 на своем сервере, то эти действия можно заменить простым кодом:


Результат в базе:

JSON кодировка базы данных

Кроме того, будет полезно знать эти строки:

$a = array('<foo>',"'bar'",'"baz"','&blong&', "xc3xa9");
echo "Обычно: ", json_encode($a), "n";
echo "Тэги: ", json_encode($a, JSON_HEX_TAG), "n";
echo "Апострофы: ", json_encode($a, JSON_HEX_APOS), "n";
echo "Кавычки: ", json_encode($a, JSON_HEX_QUOT), "n";
echo "Амперсанды: ", json_encode($a, JSON_HEX_AMP), "n";
echo "Юникод: ", json_encode($a, JSON_UNESCAPED_UNICODE), "n";
$b = array();
echo "Отображение пустого массива как массива: ", json_encode($b), "n";
echo "Отображение пустого массива как объекта: ", json_encode($b, JSON_FORCE_OBJECT), "nn";
$c = array(array(1,2,3));
echo "Отображение неассоциативного массива как массива: ", json_encode($c), "n";
echo "Отображение неассоциативного массива как объекта: ", json_encode($c, JSON_FORCE_OBJECT), "nn";
$d = array('foo' => 'bar', 'baz' => 'long');
echo "Ассоциативный массив всегда отображается как объект: ", json_encode($d), "n";?>

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

Обычно: ["<foo>","'bar'",""baz"","&blong&","u00e9"]
Тэги: ["u003Cfoou003E","'bar'",""baz"","&blong&","u00e9"]
Апострофы: ["<foo>","u0027baru0027",""baz"","&blong&","u00e9"]
Кавычки: ["<foo>","'bar'","u0022bazu0022","&blong&","u00e9"]
Амперсанды: ["<foo>","'bar'",""baz"","u0026blongu0026","u00e9"]
Unicode: ["<foo>","'bar'",""baz"","&blong&","é"]
Все: ["u003Cfoou003E","u0027baru0027","u0022bazu0022","u0026blongu0026","é"]
Отображение пустого массива как массива: []
Отображение не ассоциативного массива как объекта: {}
Отображение неассоциативного массива как массива: [[1,2,3]]
Отображение неассоциативного массива как объекта: {"0":{"0":1,"1":2,"2":3}}
Ассоциативный массив всегда отображается как объект: {"foo":"bar","baz":"long"}


The json_encode() does'nt gave you correct json I have written a  code that can give a valid json
abstract class DatabaseConnectionClass {
    protected  $link;

    protected  function  __construct()
     $this->link=mysqli_connect('localhost','root','','realestate')  or die('Unable to connect to database');


include 'DatabaseConnectionClass.php';

class JSON extends DatabaseConnectionClass
    private $recordCount;
    function __construct()
        // Used for  Connecting to Database
    private function jsonFileWriter($buffer_string,$mode)
        // This function is to write data onto a file.
        fwrite($jsonFile, $buffer_string);

    public function generateJSON()
        /* Used to generate data for Angular JS JSON File*/
        /*Refer ExportJson.class in phpMyAdmin*/

        $res=$this->link->query('SELECT `id`,`district`,`taluk`,`category`,`type`,`description`,`amount` FROM `tbl_info` WHERE 1');
        while ($row=$res->fetch_assoc())

                $buffer = ', ';
            $json=json_encode($row, JSON_PRETTY_PRINT, 512);
            $buffer = '] ';



mb_substr($in_str, $i, 1);
     if(mb_ereg("&#(\d+);", mb_encode_numericentity($mb_char, $convmap, "UTF-8"), $match))
       $str = sprintf("\u%04x", $match[1]) . $str;
       $str = $mb_char . $str;
   return $str;
 function php_json_encode($arr)
   $json_str = "";
     $pure_array = true;
     $array_length = count($arr);
       if(! isset($arr[$i]))
         $pure_array = false;
       $json_str ="[";
       $temp = array();
         $temp[] = sprintf("%s", php_json_encode($arr[$i]));
       $json_str .= implode(",",$temp);
       $json_str .="]";
       $json_str ="{";
       $temp = array();
       foreach($arr as $key => $value)
         $temp[] = sprintf(""%s":%s", $key, php_json_encode($value));
       $json_str .= implode(",",$temp);
       $json_str .="}";
       $json_str = """. json_encode_string($arr) . """;
     else if(is_numeric($arr))
       $json_str = $arr;
       $json_str = """. json_encode_string($arr) . """;
   return $json_str;


Функция json_encode в php

Функция json_encode способна преобразовать в формат json переменную, массив или объект.

 <?php $msv = array('x1' => 10, 'x2' => 20, 'x3' => 30); $jmsv= json_encode($msv); //Содержимое $jmsv после выполнения этого куска кода: //{"x1":10,"x2":20,"x3":30} ?> 

В данном примере массив был преобразован в строку json.

Функция json_decode в php

Функция json_decode служит для расшифровки полученной строки. В результате работы функции мы можем получить массив или объект, в зависимости от выбранного параметра. Функция имеет несколько параметров. Первый является обязательным — это и есть строка, которую мы должны расшифровать. Второй параметр можно не указывать, тогда получим объект, а если указать — получим массив. На примере разберетесь.

 <?php $jmsv = '{"x1":10,"x2":20,"x3":30}'; $outcls=json_decode($json); $outmsv=json_decode($json, true); В результате получаем класс $outcls и массив $outmsv.  ?> 

Получение данных из класса:

 <?php echo $outcls->{'x1'}; ?> 

Получение данных из массива:

 <?php echo $outmsv['x1']; ?> 



string json_encode ( mixed value )

Returns a string containing the JSON representation of value.

JSON (англ. JavaScript Object Notation) — текстовый формат обмена данными, основанный на JavaScript и обычно используемый именно с этим языком. Как и многие другие текстовые форматы, JSON легко читается людьми.

Список параметров


The value being encoded. Can be any type except a resource.

Возвращаемые значения

Возвращает данные в формате JSON string on success.


Пример 1. A json_encode() example
$arr = array ('a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5);  echo json_encode($arr);

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

Пример 2. A json_encode()
$json_data = array ('id'=>1,'name'=>"ivan",'country'=>'Russia',"office"=>array("yandex"," management")); echo json_encode($json_data);

Пример 3. Эмулятор json_encode()
if (!function_exists('json_encode')) {  function json_encode_($a=false) {  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); $i $v) $result[] = json_encode_($k).':'.json_encode_($v);  return '{' . join(',', $result) . '}';  } } }


You May Also Like

About the Author: admind

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

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

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