首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有数字检查的Laravel Response::json()

问带有数字检查的Laravel Response::json()
EN

Stack Overflow用户
提问于 2014-06-02 22:09:23
回答 2查看 9.2K关注 0票数 7

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

例如。

代码语言:javascript
复制
$properties = Model::find(6);
return Response::json($properties);

返回类似以下内容:

代码语言:javascript
复制
{
    "name": "A nice item",
    "value": "160806.32"
}

当它应该返回时:

代码语言:javascript
复制
{
    "name": "A nice item",
    "value": 160806.32
}

在普通的php中,你可以使用JSON_NUMERIC_CHECK来解决这个问题,但是对于Response::json()方法似乎没有这样的选项。如何确保数值字段以数字而不是字符串的形式返回?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-06-02 22:25:37

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

它看起来就像这样

代码语言:javascript
复制
return Response::json($properties, 200, [], JSON_NUMERIC_CHECK);

或者,你可以这样做:

代码语言:javascript
复制
    return Response::make(
        $properties->toJson(JSON_NUMERIC_CHECK), 
        200, 
        ['Content-Type' => 'application/json']
    );

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

和

代码语言:javascript
复制
    return Response::make(
        json_encode($properties->toArray(), JSON_NUMERIC_CHECK), 
        200, 
        ['Content-Type' => 'application/json']
    );

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

票数 24
EN

Stack Overflow用户

发布于 2016-04-15 22:44:01

使用JsonResponse的setEncodingOptions方法

代码语言:javascript
复制
return response()->json($properties)->setEncodingOptions(JSON_NUMERIC_CHECK);
票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23996567

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档