久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

使用PHP json_decode可能遇到的坑與解決方法

在我們?nèi)粘J褂胮hp開(kāi)發(fā)的時(shí)候,經(jīng)常會(huì)用到j(luò)son_decode函數(shù),最近在使用json_decode函數(shù)的發(fā)現(xiàn)了一個(gè)坑,想著總結(jié)分享出來(lái),所以下面這篇文章主要給大家介紹了關(guān)于使用PHP json_decode可能遇

前言

最近在做網(wǎng)站 的時(shí)候用到了json_decode函數(shù),發(fā)現(xiàn)了一個(gè)問(wèn)題,現(xiàn)在總結(jié)分享出來(lái)供大家參考學(xué)習(xí),話不多說(shuō)了,來(lái)一起看看詳細(xì)的介紹吧。

場(chǎng)景:

某項(xiàng)目客戶反饋,輸出的結(jié)果 JSON 中有個(gè)要求為對(duì)象的數(shù)據(jù)字段,在某些情況下返回的是 [] 而不是 {};數(shù)據(jù)由公司其他部門(mén)提供,查看原始數(shù)據(jù)的時(shí)候,沒(méi)有發(fā)現(xiàn)任何問(wèn)題;后來(lái)因?yàn)橐尤肽承╊A(yù)處理,在獲取到其他部門(mén)的 JSON 數(shù)據(jù)之后進(jìn)行解碼并對(duì)某個(gè)字段進(jìn)行處理;然而,在處理完之后再次使用 JSON 輸出,發(fā)現(xiàn)結(jié)果已經(jīng)不是我們想要的了。

原始數(shù)據(jù)

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

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

編碼完成之后的結(jié)果卻是這樣的

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

空對(duì)象編程了空數(shù)組,而且我并沒(méi)有處理過(guò)字段 bar

通過(guò)對(duì)模擬數(shù)據(jù)的實(shí)測(cè),發(fā)現(xiàn)是因?yàn)樵趯?duì) JSON 進(jìn)行解碼的時(shí)候,是這么解的

$data = json_decode($jsonString, true)

問(wèn)題就出在這里,由于 PHP 自身的特性,在 PHP 中 array 是可以代表強(qiáng)類(lèi)型語(yǔ)言,如 Java 中的 List 和 Map 的。

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

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

來(lái)源 http://php.net/manual/zh/function.json-decode.php

當(dāng)?shù)诙€(gè)參數(shù) $assoc 為 true 時(shí),返回的類(lèi)型是 array,所以問(wèn)題就來(lái)了,當(dāng) JSON 中空對(duì)象 {} 和 [] 空數(shù)組,使用這種方式解碼出來(lái)的結(jié)果表現(xiàn)是一致的;即 array();當(dāng)再次 json_encode() 編碼的時(shí)候就出現(xiàn)了 {} 變 [] 了。

所以正確的做法是在解碼 JSON 的時(shí)候 json_decode 不要傳遞第二個(gè)參數(shù);讓解碼結(jié)果是一個(gè)對(duì)象,然后操作對(duì)象的屬性,操作完成之后再次編碼就不會(huì)出現(xiàn)偏差。

這種問(wèn)題最突出在于強(qiáng)類(lèi)型語(yǔ)言和弱類(lèi)型語(yǔ)言的 API 對(duì)接上,由于項(xiàng)目的下家是使用 Java 語(yǔ)言,所以導(dǎo)致了 BUG

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)的支持。

【網(wǎng)站聲明】本站除付費(fèi)源碼經(jīng)過(guò)測(cè)試外,其他素材未做測(cè)試,不保證完整性,網(wǎng)站上部分源碼僅限學(xué)習(xí)交流,請(qǐng)勿用于商業(yè)用途。如損害你的權(quán)益請(qǐng)聯(lián)系客服QQ:2655101040 給予處理,謝謝支持。

相關(guān)文檔推薦

這篇文章主要介紹了PHP有序表查找之插值查找算法,簡(jiǎn)單分析了插值查找算法的概念、原理并結(jié)合實(shí)例形式分析了php實(shí)現(xiàn)針對(duì)有序表插值查找的相關(guān)操作技巧,需要的朋友可以參考下
下面小編就為大家分享一篇ThinkPHP整合datatables實(shí)現(xiàn)服務(wù)端分頁(yè)的示例代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
下面小編就為大家分享一篇PHP實(shí)現(xiàn)APP微信支付的實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
這篇文章主要介紹了PHP實(shí)現(xiàn)的多維數(shù)組排序算法,結(jié)合實(shí)例形式對(duì)比分析了php針對(duì)多維數(shù)組及帶有鍵名的多維數(shù)組進(jìn)行排序相關(guān)操作技巧與注意事項(xiàng),需要的朋友可以參考下
這篇文章主要為大家詳細(xì)介紹了php結(jié)合ajaxuploadfile實(shí)現(xiàn)無(wú)刷新文件上傳功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
本篇文章給大家詳細(xì)介紹了PHP開(kāi)發(fā)接口使用RSA進(jìn)行加密解密方法,對(duì)此有興趣的朋友可以學(xué)習(xí)下。
主站蜘蛛池模板: 亚洲区视频 | 日韩成人小视频 | 成年在线观看 | 精品久久久久久久久久久久 | 国产无遮挡又黄又爽又色 | 午夜专区 | 精品精品| 毛片毛片毛片毛片毛片 | 欧美日韩免费在线 | 国产精品久久久久久久久久久久久久 | 性猛交xxxx富婆老太婆 | 综合婷婷 | 国产成人在线免费视频 | 亚洲九九九 | 亚洲免费视频一区 | 久久久精品在线观看 | 中文字幕在线播放视频 | 91成人精品一区在线播放 | 亚洲精品久久久蜜桃 | 宅男噜噜噜66一区二区 | 日本中文字幕在线观看 | 欧美激情综合五月色丁香 | 久久久香蕉 | 国产美女福利 | 欧美日韩在线不卡 | 亚洲精品在线看 | 精品国产三级 | 欧美日本一区 | 综合久久99| 国产成人亚洲精品自产在线 | 免费观看av | 国产精品久久久久久久久久 | 麻豆av网站 | 伊人国产在线 | 黄色大片在线免费观看 | 亚洲人成在线播放 | 97人人艹| 官场少妇尤物雪白高耸 | 欧美视频在线一区 | 四虎毛片 | 国产无遮挡又黄又爽免费网站 |