php - ¿Cómo determinar si una cadena es JSON válida?
validation code-snippets (5)
¿Alguien sabe de un fragmento de función is_JSON robusto (ya prueba de balas) para PHP? Yo (obviamente) tengo una situación en la que necesito saber si una cadena es JSON o no.
Hmm, tal vez ejecutarlo a través de una solicitud / respuesta JSONLint , pero eso parece un poco exagerado.
¿ json_decode()
no json_decode()
con json_last_error()
? ¿Está buscando solo un método para decir "¿se ve esto como JSON" o realmente validarlo? json_decode()
sería la única forma de validarlo efectivamente dentro de PHP.
¿Qué pasa con el uso de json_decode
, que debería devolver null
si la cadena dada no era válida con datos codificados en JSON?
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, uso esta función (lea la " Nota " en json_decode() documentos).
Al pasar los mismos argumentos que pasaría a json_decode (), puede detectar "errores" de aplicación específicos (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)";
}
Si está utilizando la función incorporada json_decode
PHP, json_last_error
devuelve el último error (por ejemplo, json_last_error cuando su cadena no era JSON).
Por json_decode
general, json_decode
devuelve null
todos modos.
$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"}'' ); }