(PHP json_decode kötü json veri tespit)?

3 Cevap php

Json_decode () aracılığıyla çözümlenen zaman kolu kötü json veri çalışıyorum. Ben aşağıdaki komut dosyası kullanarak ediyorum:

if(!json_decode($_POST)) {
  echo "bad json data!";
  exit;
}

$ _POST Eşitse:

'{ bar: "baz" }'

Then json_decode handles the error fine and spits out "bad json data!"; However, if I set $_POST to something like "invalid data", it gives me:

Warning: json_decode() expects parameter 1 to be string, array given in C:\server\www\myserver.dev\public_html\rivrUI\public_home\index.php  on line 6
bad json data!

Ben geçerli json veri tespit veya bu tespit diğer bazı şık bir yolu yoktur için özel bir komut dosyası yazmak gerekiyor mu?

3 Cevap

İşte hakkında bir kaç şey vardır json_decode :

  • Bu veri döndürür, ya null bir hata var
  • o da dönebilirsiniz null hiçbir hata olduğunda: JSON dize içeriyorsa null
  • Bir uyarı var bir uyarı yükseltir - kaybolursun yapmak istediğiniz uyarı.


To solve the warning problem, a solution would be to use the
@ operator (I don't often recommend using it, as it makes debuging a lot more harder... But here, there is not much of a choice) :

$_POST = array(
    'bad data'
);
$data = @json_decode($_POST);

Daha sonra test etmek olurdu Eğer $data olup null - ve, {için hangi json_decode döner null davayı önlemek için [(1)]} JSON dizesinde, kontrol json_last_error , which (quoting) olabilir:

Returns the last error (if any) occurred by last JSON parsing.


Which means you'd have to use some code like the following :

if ($data === null
    && json_last_error() !== JSON_ERROR_NONE) {
    echo "incorrect data";
}

Ayrıca json_last_error kullanabilirsiniz: http://php.net/manual/en/function.json-last-error.php

hangi belgeleri dediği gibi:

Returns the last error (if any) occurred during the last JSON encoding/decoding.

Burada bir örnek

json_decode($string);

switch (json_last_error()) {
    case JSON_ERROR_NONE:
        echo ' - No errors';
    break;
    case JSON_ERROR_DEPTH:
        echo ' - Maximum stack depth exceeded';
    break;
    case JSON_ERROR_STATE_MISMATCH:
        echo ' - Underflow or the modes mismatch';
    break;
    case JSON_ERROR_CTRL_CHAR:
        echo ' - Unexpected control character found';
    break;
    case JSON_ERROR_SYNTAX:
        echo ' - Syntax error, malformed JSON';
    break;
    case JSON_ERROR_UTF8:
        echo ' - Malformed UTF-8 characters, possibly incorrectly encoded';
    break;
    default:
        echo ' - Unknown error';
    break;
}

PHP dahil json fonksiyonları çok yardımcı değildir. Onlar konularda bir sürü var. İyi bir kütüphaneyi bulmak için json.org bir göz atın.