Tôi thích json dưới dạng định dạng cho các tệp cấu hình cho phần mềm tôi viết. Tôi thích nó nhẹ, đơn giản và được hỗ trợ rộng rãi. Tuy nhiên, tôi thấy rằng có một số điều tôi thực sự thích trong json rằng nó không có.Các lựa chọn thay thế JSON (cho mục đích chỉ định cấu hình)?
Json không có nhiều chuỗi hoặc tài liệu ở đây (http://en.wikipedia.org/wiki/Here_document) và thường rất khó xử khi bạn muốn tệp json của mình trở nên dễ đọc và có thể chỉnh sửa được. Bạn có thể sử dụng mảng của chuỗi, nhưng đó là một cách giải quyết kludgy.
Json không cho phép nhận xét.
Nếu bạn nhìn vào các định dạng của tệp cấu hình unix, bạn sẽ thấy rất nhiều người thiết kế các định dạng khó xử của riêng mình cho những thứ thực sự sử dụng một số loại mục đích chung. Ví dụ, đây là một số mã từ một tập tin cấu hình Apache:
RewriteEngine on
RewriteBase /temp
RewriteCond %{HTTP_ACCEPT} application/xhtml\+xml
RewriteCond %{HTTP_ACCEPT} !application/xhtml\+xml\s*;\s*q=0
RewriteCond %{REQUEST_URI} \.html
RewriteCond %{THE_REQUEST} HTTP/1\.1
RewriteRule t\.html t.xhtml [T=application/xhtml+xml]
Về cơ bản, những gì đang xảy ra ở đây là họ đã phát minh ra một cách vô cùng đau đớn của việc viết một hàm boolean f (w, x, y, z) = w &! x & y & z. Bạn muốn có một "hoặc" hợp lý? Họ cũng có một cơ chế riêng biệt (xấu xí) cho điều đó.
Điều này dường như chỉ ra là một số loại ngôn ngữ mô tả dữ liệu đơn giản và không đầy đủ, nhưng vẫn biểu cảm hơn, linh hoạt và thuận tiện hơn so với json. Có ai biết ngôn ngữ như vậy không?
Theo sở thích của tôi, XML quá phức tạp và biểu thức lisp có tính năng sai (Turing-completeeness) và thiếu các tính năng phù hợp (ở đây tài liệu, cú pháp biểu cảm).
[EDIT] Tiêu đề gây hiểu lầm. Tôi không thực sự quan tâm đến sự lặp lại tiếp theo của json. Tôi không quan tâm đến các ngôn ngữ là một tập con của javascript. Tôi quan tâm đến các ngôn ngữ mô tả dữ liệu thay thế.
[YAML] (http://en.wikipedia.org/wiki/YAML)? – BalusC
@BalusC: Gợi ý thú vị :-) Nhưng YAML dường như không cung cấp bất kỳ cách hay nào để thực hiện chức năng boolean/ví dụ Apache, hoặc các ứng dụng có hương vị tương tự. –