2017-07-11 37 views
0

當使用Laravel 5.4並使用無符號BIGINT字段類型時,遇到了奇怪的問題。在我的數據庫我Laravel 5.4 - JSON響應減去數字

一個字段的值是這樣的:

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)會將字符串轉換爲數字值,但是可以選擇在其他方向上進行編碼,並將數字編碼爲字符串,因此不會出現此問題?

回答

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

什麼可問題是你獲取數據錯誤從數據庫或列是不正確的。

+0

使用你的代碼時,我仍然得到錯誤的值。數字以76而不是77結尾。 – Zank

+0

我沒有使用json_decode。這些id是我的ajax調用的響應,所以json_object直接在JS中使用。進一步檢查後,它看起來像由Chrome o_O更改值當我用var_dump打印響應時,看起來沒有錯誤。只有當返回的結構格式爲json時纔會出現問題。 – Zank

+0

使用FireFox,Opera和Vivaldi時也會出現同樣的情況。 'return response() - > json(['ids'=> array(10156480263320077,10157375840500077,285320181803715,798994416871156,10152807376710077,620382424666122,10152824605589176,824259214287650,10156820510510077)]);' – Zank