当对一个模型(使用MySQL驱动程序)执行一个有一些数字字段的有说服力的查询,然后返回结果的json响应时,json似乎将数值作为字符串而不是数字传递。
。
$properties = Model::find(6);
return Response::json($properties);
返回如下内容:
{
"name": "A nice item",
"value": "160806.32"
}
何时返回:
{
"name": "A nice item",
"value": 160806.32
}
在正常的php中,您可以使用JSON_NUMERIC_CHECK
来解决这个问题,但Response::json()
方法似乎没有这样的选项。如何确保数字字段作为数字而不是字符串返回?
你可以忽略这个选项。如果我们看一下JsonResponse类的源代码,你可以将json_encode options作为最后一个参数。
它看起来像这样
return Response::json($properties, 200, [], JSON_NUMERIC_CHECK);
或者您可以这样做:
return Response::make(
$properties->toJson(JSON_NUMERIC_CHECK),
200,
['Content-Type' => 'application/json']
);
注意:如果$properties
不是一个eleequoent模型,那么它必须至少实现JsonableInterface
和:
return Response::make(
json_encode($properties->toArray(), JSON_NUMERIC_CHECK),
200,
['Content-Type' => 'application/json']
);
雄辩中的toJson()方法只是包装json_encode()
并将模型数组传递给它。我建议使用前两个选项之一。
使用JsonResponse
的setEncodingOptions
方法:
return response()->json($properties)->setEncodingOptions(JSON_NUMERIC_CHECK);