Girişinin geçerli JSON olup olmadığını belirleyen bir program yazın .
Giriş: ASCII metni:
[\x00-\x7F]*Not: ASCII sorunluysa, başka bir kodlama kullanmaktan çekinmeyin, ancak yayınınızda belirtin.
Çıktı:
ValidveyaInvalid. Sondaki satırsonu atlanabilir.Misal:
$ echo '{"key": "value"}' | ./json-validate Valid $ echo '{key: "value"}' | ./json-validate InvalidKurallar:
- JSON ayrıştırma kitaplığı kullanmayın.
- Kısmen doğru çözümlere izin verilir, ancak kaşlarını çatır.
- Test paketi puanınızı gönderin (aşağıya bakın).
En kısa doğru çözüm kazanır.
Lütfen programınızda json-validate-test-suite.sh dosyasını çalıştırın ve puanınızı gönderin. Misal:
$ ./json-validate-test-suite.sh ./buggy-prog
fail: should be invalid: [ 0.1e ]
fail: should be invalid: [ 0.1e+-1 ]
fail: should be invalid: [ 0.1e-+1 ]
score: 297/300
Kaynaklar:
- json.org - Kolay takip edilen resimlerle JSON dilbilgisinin kısa tanımı.
- RFC 4627 - JSON teknik özellikleri
- json-validate.c - Test paketini geçen 200 satırlık bir uygulama.
JSON dilbilgisi aşağıdaki gibidir:
json: object | array
object: '{' members? '}'
members: pair (',' pair)*
pair: string ':' value
array: '[' elements? ']'
elements: value (',' value)*
value: string
| number
| object
| array
| 'true'
| 'false'
| 'null'
string: '"' char* '"'
char: [^"\\\x00-\x1F]
| '\' escape
escape: ["\\/bfnrt]
| u [0-9A-Fa-f]{4}
number: '-'? (0 | [1-9][0-9]*) ('.' [0-9]+)? ([Ee] [+-]? [0-9]+)?
Ayrıca, boşluk altı yapısal karakterden herhangi birinden önce veya sonra görünebilir {}[]:,
ws = [\t\n\r ]*
Aşağıdakileri aklınızda bulundurun:
- Gibi işlevlere dikkat edin
isspace(). JSON'daki boşluk[\t\n\r ], aynıisspace()zamanda\v(dikey sekme) ve\f(form besleme) boşluk olarak kabul edilir. Kelimenin sadece daha fazlasını kabulisdigit()edebilmesine rağmen , girişin ASCII'de olduğunu varsaydığımız için burada kullanmak uygun olmalıdır.[0-9] \x7Fteknik olarak bir kontrol karakteridir, ancak JSON RFC bundan bahsetmez (sadece bahseder[\x00-\x1F]) ve çoğu JSON ayrıştırıcısı\x7Fdizelerdeki karakterleri kabul etme eğilimindedir . Bu belirsizlik nedeniyle, çözümler ya kabul etmeyi ya da etmemeyi tercih edebilir.
{key: "value"}geçersiz JSON düşünülüyor? Geçerli bir javascripttir.