> 헤드라인 > 본문

PHP 7.3 새 버전의 JSON 오류 처리를 살펴보세요.

无忌哥哥
풀어 주다: 2018-07-12 11:39:34
원래의
3648명이 탐색했습니다.

Background

현재 안정적인 PHP V7.2에서 JSON이 유효하지 않은지 확인하려면 json_last_error() 함수를 사용하여 확인해야 합니다.

>>> json_decode("{");
=> null
>>> json_last_error();
=> 4
>>> json_last_error() === JSON_ERROR_NONE
=> false
>>> json_last_error_msg()
=> "Syntax error"
로그인 후 복사

예를 들어 Larave에서 여기를 확인하여 확인하세요. JSON 인코딩이 호출된다는 것은 오류를 일으키지 않습니다:

// Once we get the encrypted value we'll go ahead and base64_encode the input
// vector and create the MAC for the encrypted value so we can then verify
// its authenticity. Then, we'll JSON the data into the "payload" array.
$json = json_encode(compact('iv', 'value', 'mac'));
if (json_last_error() !== JSON_ERROR_NONE) {
    throw new EncryptException('Could not encrypt the data.');
}
return base64_encode($json);
로그인 후 복사

최소한 JSON 인코딩/디코딩에 오류가 있는지 확인할 수는 있지만 오류 코드와 오류 메시지를 발생시키는 예외를 발생시키는 것에 비하면 약간 투박합니다. .

JSON을 캡처하고 처리할 수 있는 옵션이 이미 있지만 새 버전이 어떤 기능을 훌륭하게 수행할 수 있는지 살펴보겠습니다!

PHP 7.3에서 던지기에 대한 오류 플래그

새로운 옵션 플래그 JSON_THROW_ON_ERROR를 사용하면 try/catch를 사용하도록 이 코드 블록을 다시 작성할 수 있습니다.

다음과 같을 수도 있습니다:

use JsonException;
try {
    $json = json_encode(compact('iv', 'value', 'mac'), JSON_THROW_ON_ERROR);
    return base64_encode($json);
} catch (JsonException $e) {
    throw new EncryptException('Could not encrypt the data.', 0, $e);
}
로그인 후 복사

이 새로운 스타일은 json_last_error() 및 일치 옵션을 검색하는 대신 JSON 데이터를 수신할 때 사용자 코드에 특히 유용하다고 생각합니다. JSON 인코딩 및 디코딩은 오류 핸들러를 활용할 수 있습니다.

이 json_decode() 함수에는 몇 가지 매개변수가 있으며 오류 처리를 활용하려는 경우 PHP 7.3 이하처럼 보일 것입니다.

use JsonException;
try {
    return json_decode($jsonString, $assoc = true, $depth = 512, JSON_THROW_ON_ERROR);
} catch (JsonException $e) {
    // Handle the JSON Exception
}
// Or even just let it bubble up...
/** 
 * Decode a JSON string into an array
 *
 * @return array
 * @throws JsonException
 */
function decode($jsonString) {
    return json_decode($jsonString, $assoc = true, $depth = 512, JSON_THROW_ON_ERROR);
}
로그인 후 복사

오류 코드 및 오류 메시지 가져오기

이전에 JSON 오류가 발생했습니다. 코드 및 메시지 다음 기능을 사용하세요:

// Error code
json_last_error();
// Human-friendly message
json_last_error_msg();
로그인 후 복사

새로운 JSON_THROW_ON_ERROR를 사용하는 경우 코드를 사용하고 메시지를 받는 방법은 다음과 같습니다.

try {
    return json_decode($jsonString, $assoc = true, $depth = 512, JSON_THROW_ON_ERROR);
} catch (JsonException $e) {
    $e->getMessage(); // like json_last_error_msg()
    $e->getCode(); // like json_last_error()
}
로그인 후 복사
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!