Viết chương trình xác định xem đầu vào của nó có phải là JSON hợp lệ hay không .
- Đầu vào: văn bản ASCII: - [\x00-\x7F]*- Lưu ý: nếu ASCII có vấn đề, vui lòng sử dụng mã hóa khác, nhưng chỉ ra nó trong bài viết của bạn. 
- Đầu ra: - Validhoặc- Invalid. Trailing dòng mới có thể được bỏ qua.
- Thí dụ: - $ echo '{"key": "value"}' | ./json-validate Valid $ echo '{key: "value"}' | ./json-validate Invalid
- Quy tắc: - Không sử dụng thư viện phân tích cú pháp JSON.
- Các giải pháp đúng một phần được cho phép, nhưng nhăn mặt.
- Gửi điểm số bộ thử nghiệm của bạn (xem bên dưới).
 
Các ngắn nhất đúng thắng giải pháp.
Vui lòng chạy json-validate-test-suite.sh trên chương trình của bạn và gửi điểm số của bạn. Thí dụ:
$ ./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
Tài nguyên:
- json.org - Định nghĩa ngắn gọn về ngữ pháp JSON với các hình ảnh dễ theo dõi.
- RFC 4627 - Đặc tả JSON
- json-validate.c - Một triển khai 200 dòng vượt qua testsuite.
Ngữ pháp JSON như sau:
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]+)?
Ngoài ra, khoảng trắng có thể xuất hiện trước hoặc sau bất kỳ trong sáu ký tự cấu trúc {}[]:,
ws = [\t\n\r ]*
Hãy ghi nhớ những điều sau:
- Cẩn thận với các chức năng như isspace(). Khoảng trắng trong JSON là[\t\n\r ], nhưngisspace()cũng coi\v(tab dọc) và\f(nguồn cấp dữ liệu biểu mẫu) là không gian. Mặc dù từ nàyisdigit()có thể chấp nhận nhiều hơn là[0-9], nhưng sẽ ổn khi sử dụng ở đây, vì chúng tôi giả sử đầu vào là ở ASCII.
- \x7Fvề mặt kỹ thuật là một ký tự điều khiển, nhưng JSON RFC không đề cập đến nó (nó chỉ đề cập đến- [\x00-\x1F]) và hầu hết các trình phân tích cú pháp JSON có xu hướng chấp nhận các- \x7Fký tự trong chuỗi. Vì sự mơ hồ này, các giải pháp có thể chọn chấp nhận chúng hoặc không.
{key: "value"}coi JSON không hợp lệ? Nó là javascript hợp lệ.