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.

¿Fue útil?

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

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;
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top