PHP json_decode JSON_ERROR_SYNTAX 錯(cuò)誤詳解

錯(cuò)誤描述

在PHP開發(fā)過程中,處理json字符串時(shí), json_decode返回NULL,調(diào)用last_error返回4(JSON_ERROR_SYNTAX),但是json字符串能夠被其它語(yǔ)言如python, javascript或者一些在線的json解析器正確處理。

診斷

這里一般會(huì)有以下幾種情況會(huì)造成php json_decode出錯(cuò):

json串從文件中讀取,字符順序標(biāo)記(BOM)未去除

json中含有不可見字符,json_decode解析出錯(cuò)

json對(duì)象中值為單引號(hào)字符串

尤其是第三種錯(cuò)誤比較隱蔽,肉眼觀察往往容易忽略

解決方案

下面針對(duì)上面三種情況分別給出解決方案

BOM

以二進(jìn)制方式打開文件,確認(rèn)是否有BOM,如果有,在解析之前去掉BOM即可。下面的代碼以u(píng)tf-8為例,檢測(cè)并刪除BOM。

function removeBOM($data) {????

????if (0 === strpos(bin2hex($data), 'efbbbf')) {????????

????????return substr($data, 3);????

????}????

????return $data;

}

不可見字符

解析前去除不可見字符即可。

for ($i = 0; $i <= 31; ++$i) {

????$s = str_replace(chr($i), "", $s);

}

單引號(hào)字符串值

先看下面的例子:

<?php

????$s = "{\"x\":'abcde'}";

????$j = json_decode($s, true);

????var_dump($j);

????echo json_last_error() . "\n";

PHP 5.5.9輸出

NULL

4

通常只需要把單引號(hào)替換成雙引號(hào)就可以了,具體處理時(shí)需要注意單引號(hào)可能在其它地方也出現(xiàn),是否全局替換需要根據(jù)具體情況具體分析。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,537評(píng)論 19 139
  • 第2章 基本語(yǔ)法 2.1 概述 基本句法和變量 語(yǔ)句 JavaScript程序的執(zhí)行單位為行(line),也就是一...
    悟名先生閱讀 4,540評(píng)論 0 13
  • 雪花飄落在迎春花的額頭, 驚的小白楊顫抖著綠芽?jī)海?北歸的雁兒找不到去處, 喜鵲,被占領(lǐng)了巢穴; 煩躁的土狗伸長(zhǎng)了...
    小棟先生閱讀 264評(píng)論 0 2
  • 現(xiàn)在國(guó)家開放二胎,周圍生孩子的人越來越多。很多朋友都是大孩才兩三歲,二胎又來了,感覺經(jīng)濟(jì)壓力很大,兩口子又不得不都...
    壹家心理閱讀 522評(píng)論 0 0
  • 她叫皓祎,一個(gè)美麗的名字,模樣也長(zhǎng)得俊秀。今年高考,她考了550分,報(bào)了海南大學(xué)!我們都感覺她報(bào)的學(xué)校離家太遠(yuǎn)了。...
    JOJO小美好閱讀 873評(píng)論 0 3

友情鏈接更多精彩內(nèi)容