Laravel Response :: json()带数字检查

时间:2014-06-02 14:09:23

标签: php json laravel laravel-4

当对具有一些数字字段的模型(使用MySQL驱动程序)执行雄辩查询然后返回结果的json响应时,json似乎将数值作为字符串而不是数字传递。

E.g。

$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()方法似乎没有这样的选项。如何确保将数字字段作为数字而不是字符串返回?

2 个答案:

答案 0 :(得分:23)

您实际上可以通过该选项。如果我们查看JsonResponse class的源代码,您可以将json_encode选项作为最后一个参数传递。

它看起来像这样

return Response::json($properties, 200, [], JSON_NUMERIC_CHECK);

或者你可以这样做:

    return Response::make(
        $properties->toJson(JSON_NUMERIC_CHECK), 
        200, 
        ['Content-Type' => 'application/json']
    );

注意:如果$properties不是Elequoent模型,那么它必须至少实现JsonableInterface

以及

    return Response::make(
        json_encode($properties->toArray(), JSON_NUMERIC_CHECK), 
        200, 
        ['Content-Type' => 'application/json']
    );

Eloquent中的toJson()方法只包装json_encode()并将其传递给模型的数组。我建议使用前两个选项中的一个。

答案 1 :(得分:7)

使用libcrypto undefined reference to 'dlopen'的方法setEncodingOptions

JsonResponse