2009-10-30 41 views
10

Có một số thư viện JSON có sẵn cho Erlang, và nó không rõ ràng với tôi có đặc tính hiệu suất tốt nhất (và, thứ hai, dễ sử dụng), đặc biệt là cho serialization erlang-to-json.Thư viện JSON Erlang: hiệu suất tuần tự hóa?

Trường hợp sử dụng của tôi yêu cầu cả phân tích cú pháp và tuần tự hóa JSON, nhưng mã Erlang có thể sẽ tạo ra ít nhất hai đơn đặt hàng đầu ra JSON nhiều hơn (tức là tuần tự hóa).

Để tham khảo, các thư viện tôi biết bao gồm (và có thể có những người khác tôi đã không tìm thấy):

+0

cũng có mô-đun JSON trong YAWS. – jldupont

+1

eep0018 hiện được superceded bởi lib này: https://github.com/davisp/jiffy – Dfr

Trả lời

9

tôi sử dụng rfc4627.erl (I stumbled khi nó, và hiệu suất không phải là một vấn đề)

Tuy nhiên, tôi hy vọng các thư viện erlang có nguồn gốc khác nhau để thực hiện tốt tương tự. Họ chia sẻ ý tưởng (như đã chứng kiến ​​trong số code comments). AFAIK mochijsonrfc4627 có cùng định dạng erlang nguồn.

eep018 là C và vì nó đang cố gắng triển khai ... hrm ... eep-0018, term_to_json bộ mã hóa gốc có thể được bao gồm trong phiên bản Erlang trong tương lai. Không bao giờ thử nó và dường như không được duy trì tích cực.

Đề xuất cuối cùng của tôi là đi kèm với mochijeb mochijson (2). Đây là tiêu chuẩn de facto và được duy trì tích cực, được sử dụng bởi, trong số những người khác, CouchDB và Facebook.

Để chọn giữa mochijsonmochijson2, this có thể giúp bạn.

-2

Hy vọng câu trả lời này sẽ không bị lỗi ed, tuy nhiên:

Tôi cũng đã xem xét phân tích và tuần tự hóa JSON cho một dự án. Tôi đã phải xử lý nhiều dữ liệu song song, vì vậy Erlang nghe rất tuyệt! Nhưng nhiều thứ đã xử lý các chuỗi ở dạng dữ liệu JSON, và đó là nơi mọi thứ trở nên chua chát.

Như bạn có thể biết các chuỗi trong Erlang là danh sách đầy đủ các ký tự. Không giống như các chuỗi trong hầu hết các ngôn ngữ (một char là "về" một byte), mỗi ký tự trong Erlang được biểu thị bằng một số nguyên 32 bit! Vì vậy, các dây của bạn khá lớn.

Vì đó là danh sách, quyền truy cập vào phần tử đã cho của chuỗi là O (N) thay vì O (1) như bạn mong đợi trong một mảng Chars. Và, bởi vì các chuỗi là bất biến trong Erlang nối đơn giản có thể kết thúc là một quá trình rất chậm. Cuối cùng tôi nhận ra rằng tôi chỉ đơn giản là cố gắng sử dụng ngôn ngữ sai.

Trong mọi khả năng bạn đã biết tất cả những điều này, nhưng tôi cảm thấy thật hữu ích khi để lại câu trả lời này cho những người khác có thể đến bài đăng của bạn trong tương lai.

+6

Bạn nên sử dụng các tệp nhị phân trong các trường hợp như vậy, các chuỗi _not_. –

+0

Bạn nên tìm hiểu điều gì đó về danh sách io. –

+0

Và bạn nên tìm hiểu điều gì đó về mã hóa chuỗi unicode, ví dụ utf-8, khi truy cập các ký tự ngay lập tức trở thành O (N). – rvirding

2

Tôi đã sử dụng jsonerl gần đây. Nó dựa trên mochijson2 và dễ sử dụng hơn và trực quan hơn nhiều.

Các vấn đề liên quan