> 백엔드 개발 > PHP 튜토리얼 > `json_decode()`를 사용하여 PHP에서 잘못된 JSON 데이터를 안정적으로 감지하는 방법은 무엇입니까?

`json_decode()`를 사용하여 PHP에서 잘못된 JSON 데이터를 안정적으로 감지하는 방법은 무엇입니까?

Linda Hamilton
풀어 주다: 2024-11-19 14:05:02
원래의
291명이 탐색했습니다.

How to Reliably Detect Malformed JSON Data in PHP Using `json_decode()`?

PHP에서 JSON 디코드를 사용하여 잘못된 JSON 데이터를 탐지하는 방법

json_decode()를 사용하여 JSON 데이터를 구문 분석하려고 할 때 잘못된 형식을 처리하는 방법은 다음과 같습니다. 데이터 무결성을 보장하는 데 중요합니다. 이 기능은 일반적으로 효과적이지만 특정 입력 유형을 처리할 때 불일치가 나타날 수 있습니다.

문제 시나리오

다음 시나리오를 고려하십시오.

if(!json_decode($_POST)) {
  echo "bad json data!";
  exit;
}
로그인 후 복사

이 스크립트는 잘못된 JSON 데이터를 감지하고 처리하는 것을 목표로 합니다. 그러나 $_POST에 유효한 JSON 형식(예: { bar: "baz" })이 포함된 경우 json_decode()는 "bad json data!"를 표시하여 오류를 올바르게 관리합니다. 그러나 $_POST가 유효하지 않은 형식(예: "잘못된 데이터")으로 설정된 경우 예상치 못한 경고가 발생하고 이어서 "bad json data!"가 표시됩니다:

Warning: json_decode() expects parameter 1 to be string, array given in ...
bad json data!
로그인 후 복사

사용자 정의 감지 또는 대체 솔루션이 있습니까?

이 문제를 해결하기 위해 개발자는 유효한 JSON 데이터를 감지하는 사용자 정의 스크립트를 작성하거나 사용 가능한 다른 솔루션을 탐색하는 것을 고려할 수 있습니다. options.

JSON 디코드 기능을 사용하는 솔루션:

JSON 디코드에는 고려해야 할 몇 가지 주요 특성이 있습니다.

  • 파싱된 데이터를 반환하거나 오류가 발생한 경우 null입니다.
  • JSON 문자열에 다음이 포함된 유효한 경우 null이 반환될 수도 있습니다. null.
  • 특정 오류에 대해 경고를 발생시킵니다.

경고 문제를 방지하기 위해 @ 연산자를 사용할 수 있습니다(디버깅 문제로 인해 사용이 권장되지 않음). 이 연산자는 스크립트가 계속 실행되도록 허용하면서 경고를 억제합니다.

$_POST = array('bad data');
$data = @json_decode($_POST);
로그인 후 복사

경고를 억제한 후에는 $data가 null인지 확인해야 합니다. 잘못된 형식과 유효한 null 값을 구별하기 위해 json_last_error()를 활용할 수 있습니다. 이 함수는 가장 최근의 JSON 구문 분석 오류(있는 경우)를 반환합니다.

if ($data === null && json_last_error() !== JSON_ERROR_NONE) {
    echo "incorrect data";
}
로그인 후 복사

이러한 기술을 결합하면 json_decode()를 사용하여 PHP에서 유효하지 않은 JSON 데이터를 효과적으로 감지하고 처리할 수 있습니다.

위 내용은 `json_decode()`를 사용하여 PHP에서 잘못된 JSON 데이터를 안정적으로 감지하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿