国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

PHP json_decode 遇到的坑

Ryan_Li / 2269人閱讀

摘要:原始數(shù)據(jù)其中是我要進(jìn)行處理的字段,處理完成之后再次使用進(jìn)行編碼。所以正確的做法是在解碼的時(shí)候不要傳遞第二個(gè)參數(shù)讓解碼結(jié)果是一個(gè)對(duì)象,然后操作對(duì)象的屬性,操作完成之后再次編碼就不會(huì)出現(xiàn)偏差。

場(chǎng)景:某項(xiàng)目客戶反饋,輸出的結(jié)果 JSON 中有個(gè)要求為對(duì)象的數(shù)據(jù)字段,在某些情況下返回的是 [] 而不是 {};數(shù)據(jù)由公司其他部門提供,查看原始數(shù)據(jù)的時(shí)候,沒(méi)有發(fā)現(xiàn)任何問(wèn)題;后來(lái)因?yàn)橐尤肽承╊A(yù)處理,在獲取到其他部門的 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)類型語(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ù) $assoctrue 時(shí),返回的類型是 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)類型語(yǔ)言和弱類型語(yǔ)言的 API 對(duì)接上,由于項(xiàng)目的下家是使用 Java 語(yǔ)言,所以導(dǎo)致了 BUG

文章也可以在我的博客圍觀 http://www.hfxblog.com/2017/08/03/2017-08-02-Php-json-decode/

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/25581.html

相關(guān)文章

  • thinkphp3.2,微信JS-SDK開(kāi)發(fā)過(guò)程中遇到的各種問(wèn)題與細(xì)節(jié)分享

    摘要:備注登錄后可在開(kāi)發(fā)者中心查看對(duì)應(yīng)的接口權(quán)限。下載官網(wǎng)提供的示例代碼,參照中的代碼一步一步來(lái)實(shí)現(xiàn)。否則分享后的頁(yè)面會(huì)簽名失敗返回的與分享的是否一致 首先完成官方文檔前兩步(很好理解就不具體說(shuō)了):步驟一:綁定域名先登錄微信公眾平臺(tái)進(jìn)入公眾號(hào)設(shè)置的功能設(shè)置里填寫(xiě)JS接口安全域名。備注:登錄后可在開(kāi)發(fā)者中心查看對(duì)應(yīng)的接口權(quán)限。步驟二:引入JS文件在需要調(diào)用JS接口的頁(yè)面引入如下JS文件,(支...

    miya 評(píng)論0 收藏0
  • CodeIgniter遇到的坑

    摘要:文件夾中的文件首字母大寫(xiě)。因?yàn)樵谥形覜](méi)有找到日期和字符串轉(zhuǎn)換和格式化的靈活方法,所以在中處理格式化的問(wèn)題。獲取參數(shù)由于框架自身設(shè)計(jì)的問(wèn)題,推薦盡量用方式請(qǐng)求后臺(tái)服務(wù),參數(shù)格式為格式。 1.controllers文件夾中的controller文件首字母大寫(xiě)。不大寫(xiě)也可以,但是環(huán)境兼容性不好,舉個(gè)例子,我開(kāi)發(fā)環(huán)境在mac電腦上,文件名首字母小寫(xiě),服務(wù)可以正常訪問(wèn);但是在阿里云服務(wù)器(deb...

    andot 評(píng)論0 收藏0
  • (轉(zhuǎn))php json_decode解析失敗及錯(cuò)誤處理

    摘要:看到一篇很好的文章,關(guān)于處理解析失敗的方法,寫(xiě)的非常詳細(xì),特此裝載過(guò)來(lái)。再說(shuō),沒(méi)有錯(cuò)誤怎么會(huì)失敗呢如果是格式錯(cuò)誤,再低版本的都會(huì)告訴你,所以碰上第一個(gè)可能性就往非法字符串想如何處理中的非法字符根據(jù)的編碼范圍,是可以剔除掉非法字符的。 看到一篇很好的文章,關(guān)于處理json_decode解析失敗的方法,寫(xiě)的非常詳細(xì),特此裝載過(guò)來(lái)。 一般情況下,獲取到一段json內(nèi)容,直接json_deco...

    KaltZK 評(píng)論0 收藏0
  • 詳解php中的json_encode()和json_decode()函數(shù)

    摘要:在介紹這兩個(gè)函數(shù)之前,我還是想說(shuō)一下。我們需要知道的是可以轉(zhuǎn)為格式的數(shù)據(jù)類型是對(duì)象和鍵值對(duì)數(shù)組其次是。對(duì)格式的字符串進(jìn)行解碼,并轉(zhuǎn)換為變量。這樣我們可以很好的解釋的第二個(gè)參數(shù)當(dāng)為時(shí)返回?cái)?shù)組當(dāng)為默認(rèn)為時(shí)返回對(duì)象。 ? ? 在介紹這兩個(gè)函數(shù)之前,我還是想說(shuō)一下json。不知道大家對(duì)json了解多少,感覺(jué)自己接觸php一段時(shí)間后,就已經(jīng)對(duì)json有些印象,但僅僅是印象而已,我只知道它是一種數(shù)...

    Pines_Cheng 評(píng)論0 收藏0
  • PHP file_get_contents打開(kāi)文件 無(wú)法json_decode問(wèn)題

    摘要:這是因?yàn)槲募旧韼Я祟^,造成函數(shù)無(wú)法識(shí)別可以用下面的方法去掉這個(gè)頭 這是因?yàn)槲募旧韼Я薆OM頭,造成json_decode函數(shù)無(wú)法識(shí)別 可以用下面的方法去掉這個(gè)頭 $data = json_decode(trim($fileSource,chr(239).chr(187).chr(191)),true);

    ddongjian0000 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<