Php Laravel5.6如何在json响应中保留浮点和int值?
搜索了大约20分钟,仍然找不到关于如何简单地为float类型配置json响应的可靠答案Php Laravel5.6如何在json响应中保留浮点和int值?,php,json,laravel,Php,Json,Laravel,搜索了大约20分钟,仍然找不到关于如何简单地为float类型配置json响应的可靠答案 $array = DB::select('SELECT name, balance FROM ... blah blah blah'); // balance is float return response()->json([ 'data' => $array ]); 它返回: {"data":[ {"name":"bob","balance":"889.377000000000
$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"}
]}
所以,正如您可能猜到的,我希望在这个json数据中为平衡值设置float类型:
{"data":[
{"name":"bob","balance":889.37700000000018},
{"name":"john","balance":705.77400000000011}
]}
我可以使用标准的json\u encode()
函数和json\u PRESERVE\u ZERO\u FRACTION
标志来解决这个问题
但是如何使用response()->json()
做同样的事情呢
我尝试过此示例,但失败并出现错误:
return response()->json([
'data' => $array
],
Response::HTTP_OK,
[],
JSON_PRESERVE_ZERO_FRACTION
);
您可以通过以下方式提供映射来强制转换模型属性:
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": []
}
]
我通过对查询结果进行排序并将平衡值转换为浮动在foreach循环中来解决这个问题
$array= [];
foreach($result as $row) {
array_push($array, [
'name' => $row->name,
'balance' => (float) $row->balance
]);
}
return response()->json([
'data' => $array
]);
“它失败并出现错误:“……到底是什么错误?”?根据源代码,您似乎使用了正确的选项。@ADyson,对不起,我没有捕获错误。但是,如果我可以为此只放置一个标志,而不是
response()->json()
函数中的所有参数,那就太好了。如果抛出错误,您必须能够捕获它。否则扔它的目的是什么?检查日志,和/或启用PHP错误报告,然后查看对调用此脚本的请求的响应。如果您可以使用Eloquent/Model
,则可以通过在$casts
数组中指定序列化模型属性的映射来强制转换序列化模型属性。@mr.boris如果您有解决方案,请把它写在答案部分…把你的问题作为一个问题,并把你的答案分开。这是一个问答网站,不是一个讨论论坛。请坚持格式。然后人们可以分别投票给你的问题和答案,很明显,未来的读者会接受什么样的解决方案。谢谢