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

資訊專欄INFORMATION COLUMN

PHP json_decode 遇到的坑

Ryan_Li / 2281人閱讀

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

場景:某項目客戶反饋,輸出的結(jié)果 JSON 中有個要求為對象的數(shù)據(jù)字段,在某些情況下返回的是 [] 而不是 {};數(shù)據(jù)由公司其他部門提供,查看原始數(shù)據(jù)的時候,沒有發(fā)現(xiàn)任何問題;后來因為要加入某些預(yù)處理,在獲取到其他部門的 JSON 數(shù)據(jù)之后進(jìn)行解碼并對某個字段進(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": [],
  ...
}

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

通過對模擬數(shù)據(jù)的實測,發(fā)現(xiàn)是因為在對 JSON 進(jìn)行解碼的時候,是這么解的

$data = json_decode($jsonString, true)

問題就出在這里,由于 PHP 自身的特性,在 PHP 中 array 是可以代表強(qiáng)類型語言,如 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

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

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

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

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

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

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

相關(guān)文章

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

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

    miya 評論0 收藏0
  • CodeIgniter遇到的坑

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

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

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

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

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

    Pines_Cheng 評論0 收藏0
  • PHP file_get_contents打開文件 無法json_decode問題

    摘要:這是因為文件本身帶了頭,造成函數(shù)無法識別可以用下面的方法去掉這個頭 這是因為文件本身帶了BOM頭,造成json_decode函數(shù)無法識別 可以用下面的方法去掉這個頭 $data = json_decode(trim($fileSource,chr(239).chr(187).chr(191)),true);

    ddongjian0000 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<