成人精品一区二区三区中文字幕-成人精品一区二区三区-成人精品一级毛片-成人精品亚洲-日本在线视频一区二区-日本在线视频免费

導航首頁 ? 技術教程 ? 使用PHP json_decode可能遇到的坑與解決方法
全站頭部文字 我要出現在這里
使用PHP json_decode可能遇到的坑與解決方法 886 2023-12-08   

前言

最近在做網站 的時候用到了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

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對綠夏網的支持。


主站蜘蛛池模板: 大珍珠演员表介绍| 281封信电视剧演员表| 王若麟| 伦理<禁忌1| 六一儿童节幕后换演出服| 打美女屁股视频| 2025微信头像最新版本| 怀秋| 陈牧驰介绍个人资料| 黄河颂思维导图| 涩涩免费网站| 进击的巨人2| 黑帮大佬365日| 林智妍《邂逅》未删减| 柳濑早纪| 九九九九九九伊人| 男人上路| 大学英语综合教程1课后答案| 夜之花电影| 2024年援疆职称评审最新政策 | 血型父母和孩子血型表| 浪荡女人米尔内1985| 画皮电影| 男同性网站| 宋智孝色即是空| 尤勇智的个人资料简介| 幼儿园课题研究| 九号所有车型图片| 璐·德·拉格| 无声真相电影免费观看| 日韩免费观看电影| 来自地狱| 欧美变态sososo另类| 画画的视频| 蔡贞安| 黄婉伶| angela white电影| 余男狂怒| 爱之梦钢琴谱| 补铁最好水果第一名| 都市频道节目表今天|

!!!站長長期在線接!!!

網站、小程序:定制開發/二次開發/仿制開發等

各種疑難雜癥解決/定制接口/定制采集等

站長微信:lxwl520520

站長QQ:1737366103