Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel5.6如何在json响应中保留浮点和int值?_Php_Json_Laravel - Fatal编程技术网

Php Laravel5.6如何在json响应中保留浮点和int值?

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

搜索了大约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.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如果您有解决方案,请把它写在答案部分…把你的问题作为一个问题,并把你的答案分开。这是一个问答网站,不是一个讨论论坛。请坚持格式。然后人们可以分别投票给你的问题和答案,很明显,未来的读者会接受什么样的解决方案。谢谢