JSON validatoru və gözəlləşdiricisi

2 reytinqdən 5

JSON validatoru və gözəlləşdiricisi JSON sintaksisinin düzgün olub-olmadığını yoxlayan və düzgün məzmunu strukturu daha rahat oxunacaq şəkildə formatlayan pulsuz alətdir.

JSON-u yoxlamaq və gözəlləşdirmək nə işə yarayır?

Validasiya daxil edilən məzmunun JSON qrammatikasına uyğunluğunu təsdiqləyir, gözəlləşdirmə isə düzgün obyekt və massivləri ardıcıl boşluq və girintilərlə göstərir. Bu, API cavablarında xəta axtararkən, konfiqurasiyanı istifadəyə verməzdən əvvəl yoxlayarkən və ya üçüncü tərəfin təqdim etdiyi yığcam məlumatları oxuyarkən faydalıdır.

JSON sintaksisi JavaScript obyekt literalından daha sərtdir. Xassə adları qoşa dırnaq işarələri arasında yazılmalıdır, sətirlərdə tək dırnaq işarələrindən istifadə edilə bilməz, obyekt və massivlərin sonunda isə vergül ola bilməz. Şərhlər, undefined, NaN və Infinity də JSON spesifikasiyasına daxil deyil.

Bu alət serverdə PHP-nin json_decode funksiyasından istifadə edir. Daxil etdiyin məzmun HTTPS üzərindən serverə göndərilir və saxlanılmır. Məlumat cihazını tərk etdiyi üçün təşkilatının məlumatların emalı qaydaları onların xarici serverə göndərilməsinə icazə vermirsə, parolları, giriş tokenlərini və şəxsi məlumatları əvvəlcədən sil.

JSON-u necə yoxlayım və gözəlləşdirim?

Məzmunu JSON sahəsinə yapışdır və aləti işə sal. Faydalı nəticə almaq üçün jurnal sətrindən kopyalanmış obyekt parçasını deyil, tam bir JSON dəyərini daxil et.

  1. Xam cavabı, konfiqurasiya blokunu və ya başqa JSON dəyərini ətrafındakı konsol etiketləri olmadan kopyala.
  2. Dırnaq işarələrini və qaçış simvollarını qoruyaraq onu JSON sahəsinə yapışdır.
  3. Validasiyanı işə sal, sonra formatlanmış nəticəni və ya bildirilən xətanı nəzərdən keçir.
  4. Validasiya uğursuz olarsa, ilk görünən sintaksis problemini düzəlt və aləti yenidən işə sal. Çatışmayan tək bir dırnaq işarəsi sonrakı bir neçə simvolun yanlış şərh edilməsinə səbəb ola bilər.

JSON tokenləri arasında icazə verilən dörd boşluq simvolu, boşluq (U+0020), tabulyasiya (U+0009), yeni sətir (U+000A) və karetkanın qaytarılması (U+000D), məlumatın mənasına təsir etmir. Buna görə məlumatı dəyişmədən onları əlavə etmək və ya silmək olar. Dırnaq içindəki sətirdə olan boşluq isə məlumatdır və dəyişməz qalmalıdır. Sətirlərin daxilindəki durğu işarələri də qorunur, lakin dırnaq işarələri, əks bölü işarələri və idarəetmə simvolları uyğun qaçış ardıcıllığı ilə yazılmalıdır.

Validasiya nəticəsini necə başa düşüm?

Uğurlu nəticə PHP-nin daxil edilən məzmunu JSON kimi dekodlaya bildiyini göstərir. Uğursuz nəticə isə parserin onu tam və düzgün bir JSON dəyəri kimi şərh edə bilmədiyini bildirir. Gözəlləşdirmə düzgün obyekt və massivlərin iç-içə quruluşunu və sərhədlərini aydın göstərir.

Validasiyanın uğursuz olmasının geniş yayılmış səbəbləri bunlardır:

  • } və ya ] işarəsindən əvvəl artıq vergül;
  • {name: "Ada"} kimi dırnaqsız xassə adı;
  • tək dırnaq işarələri ilə yazılmış sətirlər;
  • xassələr və ya massiv elementləri arasında çatışmayan vergül;
  • sətir daxilində qaçış işarəsi qoyulmamış qoşa dırnaq və ya əks bölü işarəsi;
  • tamamlanmamış obyekt, massiv və ya sətir;
  • yanlış UTF-8 məzmunu və ya sətir daxilində xam idarəetmə simvolu;
  • 01 və ya -01 kimi tam ədəd hissəsində lazımsız başlanğıc sıfırları, yaxud NaN kimi JSON-a aid olmayan dəyərlər.

Boş sahə düzgün JSON deyil. Bunun əksinə, 42, true, null və ya "hello" kimi ayrıca dəyər obyekt və ya massiv olmasa da, düzgün JSON sayılır. Həddindən artıq dərin iç-içə quruluşa malik məzmun dekoderin iç-içəlik limitini də aşa bilər.

Sintaksis yoxlaması məlumatın API müqaviləsinə uyğunluğunu təsdiqləmir. Sənəd düzgün JSON ola bilər, amma tətbiqin ədəd gözlədiyi yerdə sətir saxlaya, məcburi xassəni buraxa və ya qəbuledilməz tarix formatından istifadə edə bilər. Belə tələbləri yoxlamaq üçün JSON Schema və ya tətbiq səviyyəsində yoxlamalardan istifadə et.

İzahlı JSON nümunələri

Düzgün yığcam giriş:

{"name":"Ada","active":true,"roles":["admin","editor"]}

Gözəlləşdirilmiş nəticədə xassələr və massiv elementləri ayrı-ayrı, girintili səviyyələrdə göstərilir. Dəyərlər müvafiq olaraq sətir, məntiqi dəyər və massiv olaraq qalır. Formatlama yalnız görünüşü dəyişir, əsas məlumat növlərini yox.

Sonunda artıq vergül olan yanlış giriş:

{"name":"Ada","active":true,}

JSON sonuncu xassədən sonra vergülə icazə vermədiyi üçün bu giriş validasiyadan keçmir. Obyekti düzgün etmək üçün həmin vergülü sil.

Giriş düzgün UTF-8 formatındadırsa, aksentli və latın əlifbasına aid olmayan mətn birbaşa JSON sətirlərində yazıla bilər. Məsələn, {"city":"Zürich","greeting":"こんにちは"} düzgündür. \u00fc kimi JSON qaçış yazılışı da müəyyən Unicode simvollarını göstərməyin düzgün üsuludur, lakin Əsas Çoxdilli Müstəvidən kənardakı simvollar üçün surroqat cütləri tələb olunur.

JSON-u nə vaxt gözəlləşdirməyə dəyməz?

JSON-u yalnız maşın oxuyacaqsa və insan tərəfindən nəzərdən keçirilməsi və ya versiya idarəetmə sistemində yoxlanılması planlaşdırılmırsa, gözəlləşdirməyə ehtiyac yoxdur. Əlavə girintilər və sətirsonları ötürülən baytların sayını artırır. Buna görə istehsal mühitində cavablar adətən yığcam formada göndərilir.

Onsuz da yığcam olan JSON-u minimallaşdırmağın da faydası azdır. Təkrar minimallaşdırma sabit xassə adlarını və ya sətir dəyərlərini qısalda bilməz, həmin dəyərləri dəyişmək isə məlumatı dəyişdirər. JSON məlumatı deyil, istifadəyə veriləcək JavaScript kodu üçün JS minimizatoru daha uyğun seçimdir.

Gözəlləşdirmə əsasən sazlama, kod yoxlaması və istifadəyə verməzdən əvvəl aparılan yoxlamalar zamanı JSON strukturlarını və dəyərlərini nəzərdən keçirmək üçün faydalıdır. O, uyğun gəlməyən iç-içə quruluşu üzə çıxarır, böyük massivlərin gözdən keçirilməsini asanlaşdırır və konfiqurasiya Git-ə əlavə edilərkən daha səliqəli fərq müqayisələri yaradır. Lakin səhv qurulmuş JSON-u avtomatik düzəltmir və qeyri-müəyyən fraqmentin əslində nə ifadə etməli olduğunu müəyyənləşdirmir.

Tez-tez verilən suallar

JSON-da şərh yazmaq olar?

Xeyr. Standart JSON-da şərh sintaksisi yoxdur. Buna görə // comment və /* comment */ validasiyanın uğursuz olmasına səbəb olur. Konfiqurasiya faylında şərhlər lazımdırsa, onları dəstəkləyən formatdan istifadə et və ya məzmunu sərt JSON parserinə verməzdən əvvəl şərhləri sil.

Eyni xassə adı təkrarlanarsa, JSON rədd ediləcək?

Mütləq deyil. JSON spesifikasiyasına görə obyekt daxilində üzv adları unikal olmalıdır, lakin parserlər təkrarlanan adları həmişə sintaksis xətası kimi qəbul etmir. PHP ilə dekodlama zamanı adətən sonrakı dəyər saxlanılır. Buna görə hər təkrarı qorumaq vacibdirsə, dublikatları validasiyadan əvvəl aşkarla.

JSON Lines faylını yoxlaya bilərəm?

Onu vahid JSON sənədi kimi yoxlamaq olmaz. NDJSON da adlandırılan JSON Lines formatında hər sətirdə ayrıca JSON dəyəri olur, adi JSON parseri isə yuxarı səviyyədə bir dəyər gözləyir. Hər sətri ayrıca yoxla və ya qeydləri vahid JSON massivinə çevir.

Obyektdəki xassələrin sırası vacibdir?

Tətbiqlər JSON obyektindəki xassələrin sırasına güvənməməlidir. Massivlər sıralıdır, obyektlər isə adlandırılmış üzvlər toplusunu təmsil edir. Başqa parser və ya serializator həmin üzvləri fərqli ardıcıllıqla çıxara bilər. Ardıcıllıq məna daşıyırsa, dəyərləri massivdə saxla.

JSON faylı düzgün göründüyü halda niyə yoxlamadan keçmir?

Görünməyən bayt sırası işarəsi, yanlış UTF-8 və ya qaçış işarəsi qoyulmamış idarəetmə simvolu zahirən düzgün görünən mətnin validasiyadan keçməsinə mane ola bilər. Terminaldan kopyalama zamanı status etiketləri və ya zaman möhürləri kimi prefikslər də məzmuna əlavə oluna bilər. Xam baytları yoxla və ya faylı kodlaşdırma ilə idarəetmə simvollarını göstərə bilən redaktorda aç.

Son yoxlamalar

Düzəldilmiş JSON-u istifadəyə verməzdən əvvəl görünən dəyərlərlə yanaşı məlumat növlərini də müqayisə et, qaçış ardıcıllıqlarının dəyişmədiyini yoxla və məlumatı istifadə edəcək tətbiqi və ya onun sxem validasiyasını işə sal. Üçüncü tərəf məlumatındakı problemi araşdırarkən orijinal cavabın toxunulmamış nüsxəsini saxla ki, formatlama xətanın mənbəyini gizlətməsin.

Populyar alətlər