Tôi đang làm việc với các hệ thống điều khiển "thoải mái" dữ liệu JSON trong đó bao gồm vỏ kiểu #
dòng bình luận:Processing comments vỏ kiểu trong JSON
[
{
# Batman
"first-name": "Bruce",
"last-name": "Wayne"
},
{
# Superman
"first-name": "Clark",
"last-name": "Kent"
}
]
Các phần của hệ thống tôi đang làm việc trên công dụng json-lib - điều mà tôi ngạc nhiên khi khám phá là chấp nhận các nhận xét kiểu vỏ - để phân tích đầu vào JSON.
tôi cần phải trích xuất một số chú thích bổ sung từ những ý kiến, nhưng json-lib dường như chỉ loại bỏ chúng mà không cung cấp API dùng để đọc chúng:
JSONObject map = (JSONObject)JSONSerializer.toJSON("{\n"+
" # Batman\n" + // note the shell-style # comment
" \"first-name\": \"Bruce\",\n" +
" \"last-name\": \"Wayne\"\n" +
"}");
System.out.println(map.toString());
/* <<'OUTPUT'
* {"first-name":"Bruce","last-name":"Wayne"}
* OUTPUT
* note the absence of the shell-style comment
*/
này có ý nghĩa kể từ khi bình luận không phải là một phần của JSON spec và tôi json-lib may mắn không chỉ bị nghẹt thở khi phân tích cú pháp chúng ngay từ đầu.
Đáng chú ý:
- các hệ thống khác tiêu thụ cùng JSON này và các chú thích cần phải được minh bạch đối với họ, vì vậy cấu trúc JSON không thể được sửa đổi bằng cách thêm thuộc tính cho ý kiến để thay thế.
- không phải tất cả các thành phần và đối tượng trong hệ thống của tôi đều có quyền truy cập vào nguồn JSON thô: một thành phần đọc tệp và phân tích cú pháp bằng JSONlib và chuyển các bản đồ đã được tuần tự hóa v.v.
Làm cách nào để đọc và phân tích những nhận xét này trong khi xử lý đầu vào JSON? Có một thư viện mà sẽ cho phép tôi đọc chúng và liên kết chúng với vị trí của chúng trong JSON - tôi có thể dễ dàng kết nối nhận xét Batman
với mục nhập "Bruce Wayne" không?
Tôi hiện đang sử dụng json-lib, nhưng tôi đang mở để điều tra các thư viện JSON khác và mở bằng các ngôn ngữ khác mở rộng JSON, chẳng hạn như YAML - nhưng tôi không chắc những công cụ này sẽ cho phép tôi đọc và xử lý các bình luận trong đầu vào của tôi.
http://www.lifl.fr/~riquetd/parse-a-json-file-with-comments.html Liên kết này sử dụng regex: ''(^)? [^ \ S \ n] */(?: \ * (. *?) \ */[^ \ S \ n] * |/[^ \ n] *) ($)? ''Để xóa nhận xét. Tất nhiên bạn có thể sử dụng cùng một regex cho các mục đích khác. –
@remyabel - Không phải tất cả các thành phần và đối tượng trong hệ thống của tôi đều có quyền truy cập vào nguồn JSON thô: một thành phần đọc tệp và phân tích cú pháp bằng JSONlib và chuyển các bản đồ đã được tuần tự hóa v.v. –
bạn luôn có thể không đặt dữ liệu có ý nghĩa vào vị trí "vứt bỏ"? giống như tôi không lưu trữ những thứ quan trọng của tôi trong thùng rác bên ngoài nhà của tôi ... – jtahlborn