2011-10-20 11 views
16

Czy istnieje sposób sprawdzenia, czy zmienna jest prawidłowym ciągiem JSON w PHP bez użycia json_last_error()? Nie mam PHP 5.3.3.Sprawdzanie poprawności json w php

+0

Jaka wersja PHP masz? – Whetstone

+0

Nadal można przetestować, czy poprawna wartość pochodzi właśnie z dekodowania go, nawet jeśli nie będziesz znać dokładnego błędu składni. (Lub użyj wyrażenia regularnego, aby to sprawdzić.) Ha) – mario

+0

'json_decode' zwróci' null' na niepowodzenie, i jest dostępne w PHP> = 5.2. – Jon

Odpowiedz

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

Błąd, jeśli ciąg json jest prostą (poprawną) wartością "false". –

+0

Dzięki chłopaki, to pomaga dużo :) –

+0

Używam funkcji json_decode i jej zachowuje się bardzo dziwnie. jeśli wyślę taką prośbę: http://api.nblackburn.me/jobtrackr?task=account&action=modify&session=206a2911127c224a5893b8d78a4bf0fc¶ms= {}, działa, ale jeśli dodaję jakiś prawidłowy json, to nie ma żadnych pomysłów? –

2

Można sprawdzić, czy wartość z json_decode to null. Jeśli tak, jest nieprawidłowy.

+0

Używam funkcji json_decode i jej zachowanie jest bardzo dziwne. jeśli wyślę taką prośbę: http://api.nblackburn.me/jobtrackr?task=account&action=modify&session=206a2911127c224a5893b8d78a4bf0fc¶ms= {}, działa, ale jeśli dodaję jakiś prawidłowy json, to nie ma żadnych pomysłów? –

+0

Pokaż nam JSOn, który próbujesz analizować. –

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

Ponadto można spojrzeć na http://php.net/manual/en/function.json-last-error-msg.php, które zawierają implementacje brakującej funkcji.

Jednym z nich jest:

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'; 
     } 
    } 

(skopiowane wklejane ze strony)

1

Jeśli chcesz sprawdzić, czy wkład jest ważny JSON, równie dobrze można być zainteresowany sprawdzanie, czy nie podąża za określonym formatem, tj. schematem. W takim przypadku możesz zdefiniować swój schemat za pomocą JSON Schema i potwierdzić go przy użyciu tego library.

Przykład:

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"] 
} 

Validation

<?php 

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

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

$validator->isValid() 
Powiązane problemy