Laravel 5.4 - JSON响应从数字中减去一个

时间:2017-07-11 07:42:27

标签: json laravel-5

使用Laravel 5.4并使用无符号BIGINT字段类型时遇到了奇怪的问题。

我的数据库中的一个字段我有这样的值:

10156480263320077
10157375840500077
285320181803715
798994416871156
10152807376710077
620382424666122
10152824605589176
824259214287650
10156820510510077

当我尝试使用以下命令将这些值转换为JSON响应时:

return response()->json(['ids' => $ids]);

他们中的一些人减去了1人。它只发生在以77结尾的那些:

10156480263320077
10157375840500077
10152807376710077
10157375840500077

我通过在编码响应之前将它们更改为字符串而不是数字来解决我的问题。我认为这是因为JSON试图将这些值视为INT而不是BIGINT。

但我对在编码之前更改值感到不满意。知道如何通过设置JSON响应选项来实现它吗?我知道使用setEncodingOptions(JSON_NUMERIC_CHECK)会将字符串转换为数字值,但是可以选择在其他方向上执行此操作并将数字编码为字符串,这样就不会出现此问题吗?

1 个答案:

答案 0 :(得分:0)

如果你提到的那么长,你需要将其解析为字符串,然后再次转换为int。

json_decode($test, true, 512, JSON_BIGINT_AS_STRING) 

但我非常怀疑它的json响应会削减你的价值观。

您可以尝试以下代码;

$test= array(10156480263320077,10157375840500077,285320181803715,798994416871156,10152807376710077,620382424666122,10152824605589176,824259214287650,10156820510510077);
dd(json_decode(response()->json(['ids' => $test])->content(), true));

并获得此结果

enter image description here

可能的问题是您从数据库中获取数据错误或您的列不正确。