Tulis program yang menentukan apakah inputnya JSON yang valid .
Input: teks ASCII:
[\x00-\x7F]*Catatan: jika ASCII bermasalah, silakan gunakan pengkodean lain, tetapi tunjukkan dalam posting Anda.
Keluaran:
ValidatauInvalid. Mengejar baris baru dapat dihilangkan.Contoh:
$ echo '{"key": "value"}' | ./json-validate Valid $ echo '{key: "value"}' | ./json-validate InvalidAturan:
- Jangan gunakan parsing pustaka JSON.
- Solusi yang sebagian benar diizinkan, tetapi disukai.
- Posting skor test suite Anda (lihat di bawah).
The terpendek yang benar menang solusi.
Silakan jalankan json-validate-test-suite.sh di program Anda, dan poskan skor Anda. Contoh:
$ ./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
Sumber:
- json.org - Definisi ringkas tata bahasa JSON dengan gambar yang mudah diikuti.
- RFC 4627 - Spesifikasi JSON
- json-validate.c - Implementasi 200-line yang lolos dari testuite.
Tata bahasa JSON adalah sebagai berikut:
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]+)?
Juga, spasi putih dapat muncul sebelum atau sesudah salah satu dari enam karakter struktural {}[]:,
ws = [\t\n\r ]*
Ingatlah yang berikut:
- Hati-hati dengan fungsi seperti
isspace(). Spasi di JSON adalah[\t\n\r ], tetapiisspace()juga memperlakukan\v(tab vertikal) dan\f(form feed) sebagai ruang. Meskipun ada kata yangisdigit()dapat menerima lebih dari sekadar[0-9], seharusnya boleh digunakan di sini, karena kami menganggap input ada di ASCII. \x7Fsecara teknis karakter kontrol, tetapi JSON RFC tidak menyebutkannya (hanya menyebutkannya[\x00-\x1F]), dan sebagian besar parser JSON cenderung menerima\x7Fkarakter dalam string. Karena ambiguitas ini, solusi dapat memilih untuk menerimanya atau tidak.
{key: "value"}menganggap JSON tidak valid? Itu adalah javascript yang valid.