550 Stimmen

Der schnellste Weg, um zu überprüfen, ob eine Zeichenfolge JSON in PHP ist?

Ich brauche eine wirklich, wirklich schnelle Methode der Überprüfung, ob eine Zeichenfolge JSON ist oder nicht. Ich fühle mich wie dies ist nicht der beste Weg:

function isJson($string) {
    return ((is_string($string) &&
            (is_object(json_decode($string)) ||
            is_array(json_decode($string))))) ? true : false;
}

Gibt es da draußen Leistungsenthusiasten, die diese Methode verbessern wollen?

0voto

Hier ist eine leistungsfähige und einfache Funktion, die ich erstellt habe (die eine grundlegende String-Validierung verwendet, bevor sie json_decode für größere Zeichenketten):

function isJson($string) {
    $response = false;

    if (
        is_string($string) &&
        ($string = trim($string)) &&
        ($stringLength = strlen($string)) &&
        (
            (
                stripos($string, '{') === 0 &&
                (stripos($string, '}', -1) + 1) === $stringLength
            ) ||
            (
                stripos($string, '[{') === 0 &&
                (stripos($string, '}]', -1) + 2) === $stringLength
            )
        ) &&
        ($decodedString = json_decode($string, true)) &&
        is_array($decodedString)
    ) {
        $response = true;
    }

    return $response;
}

0voto

user10012 Punkte 562

Ich empfehle Folgendes

if (!in_array(substr($string, 0, 1), ['{', '[']) || !in_array(substr($string, -1), ['}', ']'])) {
  return false;
} else {
  json_decode($string);
  return (json_last_error() === JSON_ERROR_NONE);
}

0voto

איש נחמד Punkte 155
$r = (array)json_decode($arr);
if(!is_array($r) || count($r) < 1) return false;

0voto

NVRM Punkte 8487

Wenn eine lokale Datei stations.json ungültig ist, fehlt oder mehr als einen Monat alt ist, unternehmen Sie etwas.

if (!is_array(json_decode(@file_get_contents("stations.json"))) || time() > filemtime("stations.json") + (60*60*24*31)){
  // The json file is invalid, missing, or is more than 1 month old
  // Get a fresh version
} else {
  // Up to date
}

0voto

Robert Johnstone Punkte 5211

Ausweitung der diese Antwort Wie wäre es mit dem Folgenden:

<?php

    $json = '[{"user_id":13,"username":"stack"},{"user_id":14,"username":"over"}]';
    //$json = '12';

    function isJson($string) {
        json_decode($string);
        if(json_last_error() == JSON_ERROR_NONE) {
            if(substr($string,0,1) == '[' && substr($string,-1) == ']') { return TRUE; }
            else if(substr($string,0,1) == '{' && substr($string,-1) == '}') { return TRUE; }
            else { return FALSE; }
        }
    }

    echo isJson($json);
?>

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X