json_encode преобразует число в строку

#arrays #json #cakephp-2.3

#массивы #json #cakephp-2.3

Вопрос:

У меня есть массив, который содержит некоторые строковые значения и некоторые числовые значения. Я использовал

 json_encode
  

преобразовать массив в массив json, но он преобразует числовые значения в строку, которая мне не нужна.

  [["India","2"],["Panama","1"]]
  

Я пытался

 JSON_NUMERIC_CHECK
  

в качестве второго параметра в json_encode он отлично работает на localhost, но выдает ошибку в режиме онлайн.

 Use of undefined constant JSON_NUMERIC_CHECK - assumed '
  

Я использую cakephp 2.3

Комментарии:

1. каким именно вы хотите видеть результат? [["India",2],["Panama",1]] было бы недопустимым json

2. @andrew Почему это должно быть недопустимым?

3. Какую ошибку вы получаете при использовании json-декодированного массива ‘[[«Индия», «2»], [«Панама», «1»]]’ в cakephp 2.3?

4. @Ryan Vincent я использую Highchart, где я получал ошибку. Мне требуется такой формат массива [[«Индия»,2],[«Панама»,1]]

Ответ №1:

Я предполагаю, что в Интернете у вас более старая версия PHP:

JSON_NUMERIC_CHECK (целое число)

Кодирует числовые строки в виде чисел. Доступно начиная с PHP 5.3.3.

При кодировании в формате JSON в нем не будет кавычек, если PHP знает, что это не строка. Если вам нужно сделать это вручную, вы могли бы сделать что-то вроде этого:

 <?php

  function json_numeric($array)
  {
     if (is_array($array) || is_object($array)) {
        foreach($array as amp;$prop) {
            if (is_numeric($prop)) {
                $prop = intval($prop);
            }
            if (is_object($prop) || is_array($prop)) {
                $prop = json_numeric($prop);
            }
        }
     }
     return $array;
  }

  $x = array("a" => 1, "b" => "2", "c"=>array("d"=>1, "e"=>"2"));
  echo json_encode(json_numeric($x));
  //{"a":1,"b":2,"c":{"d":1,"e":2}}
  $y = new stdClass();
  $y->a = 1;
  $y->b = "2";
  echo json_encode(json_numeric($y));
  //{"a":1,"b":2}
?>
  

Комментарии:

1. Спасибо. Эта ошибка была вызвана версией php. Я обновил свою версию php, и теперь она работает нормально.