溫馨提示×

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

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

json格式錯(cuò)誤是什么意思

發(fā)布時(shí)間:2021-12-14 11:47:28 來源:億速云 閱讀:684 作者:柒染 欄目:開發(fā)技術(shù)

json格式錯(cuò)誤是什么意思,相信很多沒有經(jīng)驗(yàn)的人對(duì)此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個(gè)問題。

格式錯(cuò)誤

由于json只接受utf-8編碼的字符,所以json_encode()的參數(shù)必須是utf-8編碼,否則會(huì)得到空字符或者null。當(dāng)中文使用GB2312編碼,或者外文使用ISO-8859-1編碼的時(shí)候,這一點(diǎn)要特別注意。

$bad_json = "{ 'bar': 'baz' }";$bad_json = '{ bar: "baz" }';$bad_json = '{ "bar": "baz", }';

對(duì)這三個(gè)字符串執(zhí)行json_decode()都將返回null,并且報(bào)錯(cuò)。

第一個(gè)的錯(cuò)誤是,json的分隔符(delimiter)只允許使用雙引號(hào),不能使用單引號(hào)。第二個(gè)的錯(cuò)誤是,json名值對(duì)的"名"(冒號(hào)左邊的部分),任何情況下都必須使用雙引號(hào)。第三個(gè)的錯(cuò)誤是,最后一個(gè)值之后不能添加逗號(hào)(trailing comma)。

另外,json只能用來表示對(duì)象(object)和數(shù)組(array),如果對(duì)一個(gè)字符串或數(shù)值使用json_decode(),將會(huì)返回null。

格式正確,但卻報(bào)錯(cuò)

第一種類型,字符編碼問題

由于json只接受utf-8編碼的字符,所以json_encode()的參數(shù)必須是utf-8編碼,否則會(huì)得到空字符或者null。當(dāng)中文使用GB2312編碼,或者外文使用ISO-8859-1編碼的時(shí)候,這一點(diǎn)要特別注意。

第二種類型BOM問題

BOM報(bào)頭又叫UTF-8簽名,其實(shí)UTF-8  的BOM對(duì)UFT-8沒有作用,是為了支援UTF-16,UTF-32才加上的BOM,BOM簽名的意思就是告訴編輯器當(dāng)前文件采用何種編碼,方便編輯器 識(shí)別,但是BOM雖然在編輯器中不顯示,但是會(huì)產(chǎn)生輸出,就像多了一個(gè)空行,一般的php代碼如果用記事本等軟件編輯保存過之后,在保存一個(gè)以UTF-8編碼的文件時(shí),會(huì)在文件開始的地方插入三個(gè)不可見的字符(0xEF 0xBB  0xBF,即BOM)。它是一串隱藏的字符,用于讓記事本等編輯器識(shí)別這個(gè)文件是否以UTF-8編碼。(還不清楚為什么會(huì)在返回?cái)?shù)據(jù)時(shí)候也自動(dòng)加上了BOM報(bào)頭)。

/** * 去除bom報(bào)頭 */public static String formatString(String s) {if (s != null) {  s = s.replaceAll("\ufeff", "");} return s;}

看完上述內(nèi)容,你們掌握json格式錯(cuò)誤是什么意思的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注億速云行業(yè)資訊頻道,感謝各位的閱讀!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI