Cómo determinar si una cadena JSON es válida?
-
19-09-2019 - |
Pregunta
¿Alguien sabe de un robusto (y a prueba de balas) is_JSON fragmento de la función de PHP? I (obviamente) tiene una situación donde necesito saber si una cadena es JSON o no.
Hmm, tal vez ejecutarlo a través de un JSONLint petición / respuesta, pero que parece un poco exagerado.
Solución
Si está utilizando el construido en el json_decode
función de PHP , < a href = "http://php.net/manual/en/function.json-last-error.php" rel = "noreferrer"> json_last_error
devuelve el último error (por ejemplo, JSON_ERROR_SYNTAX
cuando la cadena no era' t JSON).
Por lo general, json_decode
vuelve null
de todos modos.
Otros consejos
¿Qué pasa con el uso de json_decode
, que debe devolver null
si la cadena no era dada datos JSON-codificado válidos / p>
Vea el ejemplo 3 en la página del manual:
// 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
Para mis proyectos de I utilizar esta función (consulte la sección " Nota: " en la json_decode () docs).
Pasando los mismos argumentos que pasaría a json_decode () se puede detectar "errores" específicos de la aplicación (por ejemplo, errores de profundidad)
Con PHP> = 5.6
// PHP >= 5.6
function is_JSON(...$args) {
json_decode(...$args);
return (json_last_error()===JSON_ERROR_NONE);
}
Con 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);
}
Ejemplo de uso:
$mystring = '{"param":"value"}';
if (is_JSON($mystring)) {
echo "Valid JSON string";
} else {
$error = json_last_error_msg();
echo "Not valid JSON string ($error)";
}
No json_decode()
con un trabajo json_last_error()
para usted? ¿Está buscando simplemente un método que decir "se ve esto JSON" o realmente valida? json_decode()
sería la única manera de validar de manera efectiva dentro 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"}' ); }
Esta es la mejor y eficiente manera
function isJson($string) {
return (json_decode($string) == null) ? false : true;
}