Heim > Schlagzeilen > Hauptteil

Werfen Sie einen Blick auf die JSON-Fehlerbehandlung in der neuen Version von PHP 7.3

无忌哥哥
Freigeben: 2018-07-12 11:39:34
Original
3648 Leute haben es durchsucht

Hintergrund

Wenn Sie im aktuell stabilen PHP V7.2 feststellen möchten, dass der JSON ungültig ist, müssen Sie die Funktionsüberprüfung json_last_error() verwenden:

>>> json_decode("{");
=> null
>>> json_last_error();
=> 4
>>> json_last_error() === JSON_ERROR_NONE
=> false
>>> json_last_error_msg()
=> "Syntax error"
Nach dem Login kopieren

Hier ist zum Beispiel eine Prüfung in Larave, um sicherzustellen, dass der Aufruf der JSON-Kodierung nicht zu einem Fehler führt:

// 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);
Nach dem Login kopieren

Wir können zumindest feststellen, ob ein Fehler in der JSON-Kodierung vorliegt /decoding, aber das ist im Vergleich zum Auslösen etwas umständlich. Eine Ausnahme gibt einen Fehlercode und eine Fehlermeldung aus.

Während Sie bereits Optionen zum Erfassen und Verarbeiten von JSON haben, wollen wir sehen, was die neue Version auf nette Weise leisten kann!

Auslösen von Fehlerflags in PHP 7.3

Mit dem neuen Optionsflag JSON_THROW_ON_ERROR ist es möglich, diesen Codeblock umzuschreiben, um Try/Catch zu verwenden.

Vielleicht so etwas:

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);
}
Nach dem Login kopieren

Ich denke, dieser neue Stil ist besonders nützlich für Benutzercode, wenn Sie JSON-Daten erhalten, anstatt nach json_last_error() zu suchen und Optionen für die JSON-Kodierung und -Dekodierung abzugleichen kann Fehlerhandler nutzen.

Diese json_decode()-Funktion benötigt ein paar Parameter und sieht aus wie PHP 7.3 und niedriger. Wenn Sie die Fehlerbehandlung nutzen möchten:

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);
}
Nach dem Login kopieren

Erhalten Sie den Fehlercode und den Fehler Nachricht

Zuvor haben Sie den JSON-Fehlercode und die JSON-Fehlermeldung mit der folgenden Funktion erhalten:

// Error code
json_last_error();
// Human-friendly message
json_last_error_msg();
Nach dem Login kopieren

Wenn Sie das neue JSON_THROW_ON_ERROR verwenden, erfahren Sie hier, wie Sie das verwenden Geben Sie den Code ein und erhalten Sie die Meldung:

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()
}
Nach dem Login kopieren
Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!