中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何解決使用PHP json_decode遇到的坑

發布時間:2021-07-12 11:30:33 來源:億速云 閱讀:199 作者:小新 欄目:開發技術

小編給大家分享一下如何解決使用PHP json_decode遇到的坑,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

場景:

某項目客戶反饋,輸出的結果 JSON 中有個要求為對象的數據字段,在某些情況下返回的是 [] 而不是 {};數據由公司其他部門提供,查看原始數據的時候,沒有發現任何問題;后來因為要加入某些預處理,在獲取到其他部門的 JSON 數據之后進行解碼并對某個字段進行處理;然而,在處理完之后再次使用 JSON 輸出,發現結果已經不是我們想要的了。

原始數據

{
 ...,
 "foo": "",
 "bar": {},
 ...
}

其中 foo 是我要進行處理的字段,處理完成之后再次使用 json_encode($data) 進行 JSON 編碼。

編碼完成之后的結果卻是這樣的

{
 ...,
 "foo": "",
 "bar": [],
 ...
}

空對象編程了空數組,而且我并沒有處理過字段 bar

通過對模擬數據的實測,發現是因為在對 JSON 進行解碼的時候,是這么解的

$data = json_decode($jsonString, true)

問題就出在這里,由于 PHP 自身的特性,在 PHP 中 array 是可以代表強類型語言,如 Java 中的 List 和 Map 的。

來看 PHP 中 json_decode() 方法是如何定義的

mixed json_decode ( string $json [, bool $assoc = false [, int $depth = 512 [, int $options = 0 ]]] )

來源 http://php.net/manual/zh/function.json-decode.php

當第二個參數 $assoc 為 true 時,返回的類型是 array,所以問題就來了,當 JSON 中空對象 {} 和 [] 空數組,使用這種方式解碼出來的結果表現是一致的;即 array();當再次 json_encode() 編碼的時候就出現了 {} 變 [] 了。

所以正確的做法是在解碼 JSON 的時候 json_decode 不要傳遞第二個參數;讓解碼結果是一個對象,然后操作對象的屬性,操作完成之后再次編碼就不會出現偏差。

這種問題最突出在于強類型語言和弱類型語言的 API 對接上,由于項目的下家是使用 Java 語言,所以導致了 BUG

以上是“如何解決使用PHP json_decode遇到的坑”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

德安县| 河东区| 江城| 公主岭市| 京山县| 延津县| 福清市| 丰城市| 洪江市| 公主岭市| 察雅县| 昌邑市| 仙居县| 两当县| 闵行区| 乐业县| 宁河县| 张家港市| 仁化县| 朔州市| 卫辉市| 北海市| 彭水| 共和县| 盘锦市| 海丰县| 芒康县| 浦县| 驻马店市| 章丘市| 肇东市| 甘南县| 合阳县| 贺州市| 泰兴市| 五原县| 毕节市| 安义县| 阳原县| 正安县| 二连浩特市|