Bir dize geçerli bir JSON olup olmadığını belirlemek nasıl?

4 Cevap php

Herkes sağlam (ve bullet proof) PHP için is_JSON fonksiyon pasajı biliyor mu? I (tabii ki) ben bir dize JSON olup olmadığını bilmeniz gereken bir durum var.

Hmm, belki de bir JSONLint istek / yanıt aracılığıyla çalıştırmak, ama bu biraz overkill gibi görünüyor.

4 Cevap

Eğer kullanıyorsanız json_decode PHP işlevi yerleşik, json_last_error (senin dize JSON değildi örneğin JSON_ERROR_SYNTAX) son hata verir. Genellikle json_decode yine false döndürür.

Ne belirli bir dize geçerli json kodlanmış veri olmasa json_decode , which should return null kullanmaya ne dersiniz?

Manuel sayfadaki örneğe 3 Bkz:

// 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

Senin için bir json_last_error çalışma ile json_decode değil mi? Eğer "bu json benziyor" ya da aslında bunu doğrulamak söylemek için sadece bir yöntem arıyoruz. json_decode PHP etkin içinde bunu doğrulamak için tek yol olacaktır.

Eğer bir "kurşun geçirmez" çözüm gerekiyorsa Peki ben ilk bütün dize değerlendirmek size (try) zorunda düşünüyorum. Bazı karakterleri kontrol ederek nitelikli bir tahmin yapabiliriz. Sen ilk karakter geçerli json olması için bir dize için {olması gerektiğini biliyoruz.