2011-10-20 24 views
16

json_last_error() kullanmadan bir değişkenin PHP'de geçerli bir JSON dizesi olup olmadığını kontrol etmenin bir yolu var mı? PHP 5.3.3’üm yok.Doğrulama json in php

+0

PHP hangi sürümü var? – Whetstone

+0

Tam sözdizimi hatasını bilmese bile geçerli bir değerin sadece kodunu çözmekten kaynaklanıp sınandığını test edebilirsiniz. (Veya doğrulamak için bir regex kullanın. Ha) – mario

+0

'json_decode' başarısızlık durumunda 'null' döndürecektir ve PHP'de kullanılabilir = 5.2. – Jon

cevap

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

Json dizesi basit (geçerli) 'false' değeri ise başarısız olur. –

+0

Teşekkürler, bu çok yardımcı olur :) –

+0

Ben json_decode işlevi ve onun çok garip davranan kullanıyorum. Bu gibi bir istek gönderirseniz: http://api.nblackburn.me/jobtrackr?task=account&action=modify&session=206a2911127c224a5893b8d78a4bf0fc¶ms= {}, işe yarar ama eğer geçerli bir json eklersek, herhangi bir fikir olmaz mı? –

2

json_decode değerinin null olup olmadığını kontrol edebilirsiniz. Öyleyse, geçersiz.

+0

olası yinelenen json_decode işlevini kullanıyorum ve çok garip davranıyor. Bu gibi bir istek gönderirseniz: http://api.nblackburn.me/jobtrackr?task=account&action=modify&session=206a2911127c224a5893b8d78a4bf0fc¶ms= {}, işe yarar ama eğer geçerli bir json eklersek, herhangi bir fikir olmaz mı? –

+0

Bize ayrıştırmaya çalıştığınız JSOn'u gösterin. –

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

Ayrıca, eksik fonksiyonun uygulamaları içermez http://php.net/manual/en/function.json-last-error-msg.php bir göz olabilir. Bunlardan

biri şudur:

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

1

Girdinizin geçerli JSON olup olmadığını kontrol etmek istiyorsanız, siz de doğrulayarak ilginizi çekebilir (sitesinden yapıştırılan kopyalanan) olsun veya olmasın belirli bir format, yani bir şema takip eder. Bu durumda, şemanızı JSON Schema kullanarak tanımlayabilir ve bu library kullanarak doğrulayabilirsiniz.

Örnek:

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

Doğrulama

<?php 

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

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

$validator->isValid()