Zend_Db_Table_Rowset в Json преобразует целые числа в строки

#php #ajax #json #zend-framework

#php #ajax #json #zend-framework

Вопрос:

В модели:

 public function getMeasurements($user_id) {
    $user_id = (int)$user_id;
    $row = $this->fetchRow('user_id = ' . $user_id);
    return $row->toArray();
}
  

Возвращаемся в контроллер:

 $array = $user->getMeasurements($user_id);
$this->_helper->json($array);
  

Ответ JSON:

 {
   "user_id":"1",
   "height":"186.00",
   "waist":"81.00",
   "chest":"79.00",
   "hips":"81.00",
   "inseam":"85.00",
   "weight":"76.00"
}
  

Моя проблема в том, что каждое из этих полей хранится как целое число в таблице базы данных, но возвращается как строка в ответе JSON. Так в чем дело?

Устранение неполадок до сих пор включало следующее:

 $this->_helper->json(array('integer'=>0, 'string'=>'0'));
  

Это работает так, как ожидалось. Теряется ли тип при преобразовании набора строк в массив в модели?

Ответ №1:

Это не ошибка json, или при разговоре в zf
Это mysqli (или другое расширение mysql)

Смотрите пример:

 // sql
 СОЗДАТЬ ТАБЛИЦУ `foo` ( 
 `id` int(11) АВТО_ИНКРЕМЕНТ БЕЗ знака NOT NULL, 
 `type` перечисление('n','y') НЕ РАВНО НУЛЮ ПО УМОЛЧАНИЮ 'n', 
 ПЕРВИЧНЫЙ КЛЮЧ (`id`)
 ) ДВИЖОК= MyISAM AUTO_INCREMENT=7 КОДИРОВКА ПО УМОЛЧАНИЮ = utf8 
 <?
$c = new mysqli('localhost', 'azat', 'Z2UXWq2EyL7Or7m');
$c->select_db('test');
$info = $c->query('select * from foo');

var_dump($info->fetch_object());
  
 
 // вывод 
 объект (стандартный класс)#5 (2) {
 ["id"]=> 
 строка(1) "2" 
 ["тип"]=> 
 строка (1) "y" 
 } 

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

1. Спасибо, Азат. Кажется, мне нужно выполнить некоторое приведение как int.