php中json decode長整型傳輸問題

2021-09-17 22:16:23 字數 976 閱讀 1144

近日a專案儲存b專案中發過來的json串中的長整型時,發現兩個專案mysql中儲存的不一致:一共是18位長整型,但在最後兩位不一樣。

a專案語言是php5.6.38,b專案是go

a專案mysql該字段是varchar(255),b專案是bigint(64)

起初認為是json_decode時精度丟失問題,找到了php官方的json_decode,發現有相應的例子: php json_decodeexample #5

本地用以下**嘗試:

$str = '';

$arr = json_decode($str, true);

echo $arr['uuid'];

發現輸出的也是 248624693275679345(線上儲存到資料庫的是248624693275679360),沒有使用json_decode的第四個引數:  json_bigint_as_string,精度依舊沒有丟失

因為使用的是docker,本地和線上的環境是一致的

最後在翻找**時,發現乙個同事為了防止精度丟失,用了這樣的方法:

$uuid = number_format($arr['uuid'], 0, '.', '');
此時輸出$uuid,就會發現是248624693275679360

為此,請注意:

1. 在傳輸時大整型盡量轉為string(因b專案對接了其他專案,所以不能更改)

2. json_decode時,最好在第四個引數傳入json_bigint_as_string

3. 在使用number_format時,一定要注意這個方法會導致精度丟失

另:本人在使用乙個可以將json轉換成視覺化結構的瀏覽器外掛程式時,即使輸出的是248624693275679345,這個外掛程式也會把字串改為248624693275679360。估計是在轉換時,認為這是數字,js導致精度丟失

如有錯漏,歡迎指出

php使用json decode返回NULL

php5.2以後自帶json decode函式,但是對json文字串的格式要求非常嚴格。很可能使用該函式得到的返回值是null 可以使用使用json last error 函式獲取到的返回值來幫助我們判斷出問題的原因。其中如果提示錯誤json error syntax syntax error 表示...

php使用json decode返回NULL

php5.2以後自帶json decode函式,但是對json文字串的格式要求非常嚴格。很可能使用該函式得到的返回值是null 可以使用使用json last error 函式獲取到的返回值來幫助我們判斷出問題的原因。其中如果提示錯誤json error syntax syntax error 表示...

PHP中json decode返回值為null

今天在呼叫介面獲取json資料轉碼的時候遇到了問題,記錄一下 成功獲取到了資料,但經過json decode解碼後卻為null 使用json last error 函式得到錯誤 3,在網上查到原因為返回的資料為utf 8有bom頭編碼,而php使用的是 無bom頭的utf 8編碼,所以解析錯誤,知道...