Question

Quelqu'un sait-il d'un solide (et pare-balles) extrait de fonction is_JSON pour PHP? Je (évidemment) une situation où je dois savoir si une chaîne est JSON ou non.

Hmm, exécutez peut-être par un demande / réponse JSONLint, mais cela semble un peu exagéré.

Était-ce utile?

La solution

Si vous utilisez le construit en json_decode fonction PHP, < a href = "http://php.net/manual/en/function.json-last-error.php" rel = "noreferrer"> json_last_error retourne la dernière erreur (par exemple JSON_ERROR_SYNTAX lorsque votre chaîne n » était pas t JSON).

En général, json_decode retours null de toute façon.

Autres conseils

Qu'en est-il en utilisant json_decode , qui devrait revenir null si la chaîne donnée n'était pas valide les données codées JSON-?

Voir l'exemple 3 sur la page de manuel:

// the following strings are valid JavaScript but not valid JSON

// the name and value must be enclosed in double quotes
// single quotes are not valid 
$bad_json = "{ 'bar': 'baz' }";
json_decode($bad_json); // null

// the name must be enclosed in double quotes
$bad_json = '{ bar: "baz" }';
json_decode($bad_json); // null

// trailing commas are not allowed
$bad_json = '{ bar: "baz", }';
json_decode($bad_json); // null

Pour mes projets, j'utiliser cette fonction (s'il vous plaît lire le " Remarque " sur json_decode () docs).

En passant les mêmes arguments que vous passeriez à json_decode () vous pouvez détecter les « erreurs » d'application spécifiques (par exemple les erreurs de profondeur)

Avec PHP> = 5.6

// PHP >= 5.6
function is_JSON(...$args) {
    json_decode(...$args);
    return (json_last_error()===JSON_ERROR_NONE);
}

Avec PHP> = 5.3

// PHP >= 5.3
function is_JSON() {
    call_user_func_array('json_decode',func_get_args());
    return (json_last_error()===JSON_ERROR_NONE);
}

Exemple d'utilisation:

$mystring = '{"param":"value"}';
if (is_JSON($mystring)) {
    echo "Valid JSON string";
} else {
    $error = json_last_error_msg();
    echo "Not valid JSON string ($error)";
}

Ne pas json_decode() avec un travail de json_last_error() pour vous? Est-ce que vous cherchez simplement une méthode pour dire « cela ressemble JSON » ou valider réellement? json_decode() serait la seule façon de valider efficacement au sein de PHP.

$this->post_data = json_decode( stripslashes( $post_data ) );
  if( $this->post_data === NULL )
   {
   die( '{"status":false,"msg":"The post_data parameter must be valid JSON"}' );
   }

Ceci est la meilleure façon et efficace

function isJson($string) {
    return (json_decode($string) == null) ? false : true;
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top