web-dev-qa-db-fra.com

Comment déterminer si une chaîne est un JSON valide?

Quelqu'un connaît-il un extrait de fonction is_JSON robuste (et à l'épreuve des balles) pour PHP? J'ai (évidemment) une situation où j'ai besoin de savoir si une chaîne est JSON ou non.

Hmm, peut-être l'exécuter via une demande/réponse JSONLint , mais cela semble un peu exagéré.

42
Spot

Si vous utilisez la fonction intégrée json_decode PHP, json_last_error renvoie la dernière erreur (par exemple JSON_ERROR_SYNTAX lorsque votre chaîne n'était pas JSON).

Habituellement json_decode renvoie quand même null.

66
Daff

Qu'en est-il de l'utilisation json_decode , qui devrait retourner null si la chaîne donnée n'était pas des données encodées JSON valides?

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
17
Pascal MARTIN

Pour mes projets, j'utilise cette fonction (veuillez lire la " Note " sur les json_decode () docs).

En passant les mêmes arguments que vous passeriez à json_decode (), vous pouvez détecter des "erreurs" d'application spécifiques (par exemple des 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)";
}
16
cgaldiolo

json_decode() avec un json_last_error() ne fonctionne-t-il pas pour vous? Cherchez-vous juste une méthode pour dire "cela ressemble-t-il à JSON" ou le valider? json_decode() serait le seul moyen de le valider efficacement en PHP.

4
Kitson
 $ this-> post_data = json_decode (stripslashes ($ post_data)); 
 if ($ this-> post_data === NULL) 
 {
 die ( '{"status": false, "msg": "Le paramètre post_data doit être un JSON valide"}'); 
} 
3
McNally Paulo

C'est le moyen le plus efficace et le plus efficace

function isJson($string) {
    return (json_decode($string) == null) ? false : true;
}
0
Mohsin Hassan