2011-10-20 69 views
16

¿Hay alguna manera de verificar que una variable sea una cadena JSON válida en PHP sin usar json_last_error()? No tengo PHP 5.3.3.Validar json en php

+0

¿Qué versión de PHP tiene usted? – Whetstone

+0

Todavía podría probar si sale un valor válido de solo decodificarlo, incluso si no conoce el error de sintaxis exacto. (O use una expresión regular para validarlo. Ha) – mario

+0

'json_decode' devolverá' null' en caso de error, y está disponible en PHP> = 5.2. – Jon

Respuesta

35
$ob = json_decode($json); 
if($ob === null) { 
// $ob is null because the json cannot be decoded 
} 
+1

Falla si la cadena json es un valor 'falso' simple (válido). –

+0

Gracias chicos, esto ayuda mucho :) –

+0

estoy usando la función json_decode y su comportamiento muy extraño. si envío una solicitud como esta: http://api.nblackburn.me/jobtrackr?task=account&action=modify&session=206a2911127c224a5893b8d78a4bf0fc¶ms= {}, funciona, pero si agrego algún JSON válido, ¿no es así, alguna idea? –

2

Puede verificar si el valor de json_decode es null. Si es así, no es válido.

+0

estoy usando la función json_decode y su comportamiento es muy extraño. si envío una solicitud como esta: http://api.nblackburn.me/jobtrackr?task=account&action=modify&session=206a2911127c224a5893b8d78a4bf0fc¶ms= {}, funciona, pero si agrego algún JSON válido, ¿no es así, alguna idea? –

+0

Muéstranos el JSOn que estás tratando de analizar. –

9
$data = json_decode($json_string); 
if (is_null($data)) { 
    die("Something dun gone blowed up!"); 
} 
0

Además se puede echar un vistazo a http://php.net/manual/en/function.json-last-error-msg.php que contiene las implementaciones de la función que falta.

Uno de ellos es:

if (!function_exists('json_last_error_msg')) { 
     function json_last_error_msg() { 
      static $ERRORS = array(
       JSON_ERROR_NONE => 'No error', 
       JSON_ERROR_DEPTH => 'Maximum stack depth exceeded', 
       JSON_ERROR_STATE_MISMATCH => 'State mismatch (invalid or malformed JSON)', 
       JSON_ERROR_CTRL_CHAR => 'Control character error, possibly incorrectly encoded', 
       JSON_ERROR_SYNTAX => 'Syntax error', 
       JSON_ERROR_UTF8 => 'Malformed UTF-8 characters, possibly incorrectly encoded' 
      ); 

      $error = json_last_error(); 
      return isset($ERRORS[$error]) ? $ERRORS[$error] : 'Unknown error'; 
     } 
    } 

(copiada de pegar desde el sitio)

1

Si desea verificar si su entrada es JSON válida, que también podría estar interesado en la validación o no sigue un formato específico, es decir, un esquema. En este caso, puede definir su esquema usando JSON Schema y validarlo usando library.

Ejemplo:

person.json

{ 
    "title": "Person", 
    "type": "object", 
    "properties": { 
     "firstName": { 
      "type": "string" 
     }, 
     "lastName": { 
      "type": "string" 
     }, 
     "age": { 
      "description": "Age in years", 
      "type": "integer", 
      "minimum": 0 
     } 
    }, 
    "required": ["firstName", "lastName"] 
} 

Validación

<?php 

$data = '{"firstName":"Hermeto","lastName":"Pascoal"}'; 

$validator = new JsonSchema\Validator; 
$validator->validate($data, (object)['$ref' => 'file://' . realpath('person.json')]); 

$validator->isValid()