Laravel 5.6 как сохранить значения float и int в ответе json? - PullRequest
0 голосов
/ 13 ноября 2018

Поиск около 20 минут и до сих пор не может найти надежный ответ, как просто настроить JSON респон для типа с плавающей запятой.

$array = DB::select('SELECT name, balance FROM ... blah blah blah'); // balance is float

return response()->json([
   'data' => $array
]);

Возвращает:

{"data":[
   {"name":"bob","balance":"889.37700000000018"},
   {"name":"john","balance":"705.77400000000011"}
]}

Итак, как вы можете догадаться, я хочу иметь тип float в этих данных json для значений баланса:

{"data":[
   {"name":"bob","balance":889.37700000000018},
   {"name":"john","balance":705.77400000000011}
]}

Я могу использовать стандартную функцию json_encode() с флагом JSON_PRESERVE_ZERO_FRACTION для решения этой проблемы.

Но как сделать то же самое с response()->json()?

Я пробовал этот пример, но он не работает, и возникает ошибка:

return response()->json([
      'data' => $array
   ],
   Response::HTTP_OK,
   [],
   JSON_PRESERVE_ZERO_FRACTION
);

Ответы [ 2 ]

0 голосов
/ 13 ноября 2018

Я решил это, отсортировав результат запроса и приведя значение баланса к плавающему в цикле foreach.

$array= [];

foreach($result as $row) {
   array_push($array, [
      'name' => $row->name,
      'balance' => (float) $row->balance
   ]);
}

return response()->json([
   'data' => $array
]);
0 голосов
/ 13 ноября 2018

Атрибуты вашей модели можно преобразовать в

.
class UserModel {

    // mention mapping to primitive data-types as [int, float, boolean, decimal, real, array, object]
    protected $casts = array(
        "is_admin" => "boolean",
        "age" => "integer",
        "salary" => "float",
        "certificates" => "array"
    );
}

Полученная сериализованная модель JSON будет приведена в соответствие с вашими отображениями.

[
    {
        "is_admin": true,
        "age": 30,
        "salary":  100.12,
        "cetificates": []
    }
]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...