PHP 개발에서 JSON_DECODE는 JSON 데이터를 구문 분석하는 데 공통적 인 기능이지만 실제로 사용하면 구문 분석 실패를 일으키는 "불법 JSON 캐릭터"문제가 발생합니다. 이 기사는 JSON_DECODE 가 직면 한 불법 JSON 캐릭터를 문제 해결하고 해결하는 방법에 대한 포괄적 인 이해를 제공하여 문제를 신속하게 찾아서 JSON 구문 분석을 성공적으로 완료하는 데 도움이됩니다.
JSON_DECODE 는 JSON 문자열을 PHP 변수로 변환하는 데 사용됩니다. 전달 된 문자열이 올바르지 않으면 함수는 NULL을 반환하고 JSON_LAST_ERROR () 를 통해 특정 오류 코드를 얻을 수 있습니다.
일반적인 오류는 다음과 같습니다.
불법 캐릭터 : 인식되지 않은 문자가 JSON 문자열에 나타납니다.
코딩 문제 : JSON은 UTF-8 인코딩이어야합니다. 비 UTF-8 인코딩으로 인해 구문 분석이 실패합니다.
구조적 오류 : 누락 된 따옴표, 쉼표, 브래킷 불일치 등
구문 분석이 실패하면 오류 코드 및 설명이 선호됩니다.
<?php
$json = '{"name": "장 산", "age": 28,}'; // 마지막에 추가 쉼표가 있습니다.
$data = json_decode($json, true);
if (json_last_error() !== JSON_ERROR_NONE) {
echo '오류 코드:' . json_last_error() . PHP_EOL;
echo '오류 메시지:' . json_last_error_msg() . PHP_EOL;
}
?>
이 코드는 "문법 오류"를 자극하고 JSON 구조에 문제가 있음을 알려줍니다.
복잡한 JSON 문자열이 발생할 때 문자열을 온라인 JSON 검증 도구 (예 : gitbox.net)에 복사하여 구문 오류 문제 해결을 지원할 수 있습니다.
NONTF-8 인코딩 된 문자열로 인해 구문 분석이 실패 할 수 있습니다. PHP 기능을 사용하여 다음을 감지하고 변환 할 수 있습니다.
<?php
if (!mb_check_encoding($json, 'UTF-8')) {
$json = mb_convert_encoding($json, 'UTF-8', 'auto');
}
?>
때때로 복사 및 붙여 넣기는 숨겨진 캐릭터 (예 : BOM)를 생성하면 파싱이 실패 할 수 있습니다.
<?php
// 제거하다 UTF-8 BOM
$json = preg_replace('/^\x{FEFF}/u', '', $json);
?>
정규 표현식으로 인쇄되지 않은 문자를 필터링하십시오.
<?php
$json = preg_replace('/[\x00-\x1F\x7F]/u', '', $json);
?>
Escaped 이중 인용문이 JSON 문자열로 나타나면 구문 분석 오류가 발생합니다.
<?php
$json = str_replace('"', '\"', $json);
?>
참고 :이 방법은 간단한 시나리오에만 적합하며 복잡한 JSON에는 맹인 교체가 권장되지 않습니다.
PHP와 함께 제공되는 JSON_DECODE 구문 분석은 비교적 엄격하므로 다음과 같은보다 허용되는 JSON 구문 분석 라이브러리를 고려할 수 있습니다.
이 라이브러리는 불법 JSON 캐릭터를 더 잘 찾아 견딜 수 있도록 도와줍니다.
항상 JSON 문자열이 올바르게 형식화되어 있는지 확인하고 불필요한 쉼표 및 미세한 따옴표와 같은 구문 오류를 피하십시오.
JSON 문자열이 UTF-8으로 인코딩되어 있는지 확인하십시오.
숨겨진 캐릭터와 Bom을 정리하십시오.
JSON_LAST_ERROR 및 JSON_LAST_ERROR_MSG를 사용하여 포지셔닝 문제를 지원하십시오.
복잡하거나 불규칙한 JSON의 경우 검사를 지원하기 위해 특수 JSON 검증 도구 (gitbox.net 권장)를 사용해보십시오.
타사 라이브러리를 사용하여 필요할 때 분석의 견고성을 향상시킵니다.
위의 조사 기술을 마스터하고 JSON_DECODE 구문 분석 실패를 만나면 편안하고 문제를 신속하게 찾아서 해결할 수 있습니다!