Pergunta

Alguém sabe de um robusto (e à prova de bala) is_JSON trecho função para PHP? I (obviamente) têm uma situação onde eu preciso saber se uma string é JSON ou não.

Hmm, talvez executá-lo através de uma JSONLint pedido / resposta, mas que parece um exagero bit.

Foi útil?

Solução

Se você estiver usando o construído em json_decode função PHP, < a href = "http://php.net/manual/en/function.json-last-error.php" rel = "noreferrer"> json_last_error retorna o último erro (por exemplo, JSON_ERROR_SYNTAX quando o seu não era string' t JSON).

Normalmente json_decode retornos null de qualquer maneira.

Outras dicas

Que tal usar json_decode , que deve retornar null se a string dada não havia dados codificados em JSON válidos

Veja o exemplo 3 na página de 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 meus projetos eu uso essa função (leia o " Nota " no json_decode () docs).

Passar os mesmos argumentos que passaria a json_decode () você pode detectar "erros" de aplicação específica (por exemplo, erros de profundidade)

Com PHP> = 5,6

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

Com 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);
}

Exemplo 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)";
}

não json_decode() com um trabalho json_last_error() para você? Você está procurando apenas um método de dizer "Isto se parece com JSON" ou realmente validá-lo? json_decode() seria a única forma de validá-lo de forma eficaz dentro 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"}' );
   }

Este é o melhor e eficiente maneira

function isJson($string) {
    return (json_decode($string) == null) ? false : true;
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top