2014-10-28 25 views
8

Trong json4s ví dụ và tài liệu hướng dẫn Tôi thường thấy các thành ngữMục đích của `render` trong json4s

compact(render(jval)) 

pretty(render(jval)) 

Tôi không nghĩ rằng tôi đã thực sự nhìn thấy một ví dụ với compact hoặc khá áp dụng trực tiếp đến mã được tạo JValue, nhưng không rõ ràng đối với tôi những gì render đang làm ở đây. Render đã gõ JValue => JValue và tôi không thấy bất kỳ sự khác biệt rõ ràng nó làm cho và chạy

json.take(100000).filter(x => compact(render(x)) != compact(x)) 

trên một số dữ liệu của tôi trả về một sản phẩm nào một bộ sưu tập trống.

Điều gì làm render thực sự làm gì?

Trả lời

8

Tôi đoán bạn đang tìm kiếm tại một trong những triển khai cụ thể của phương pháp render, mà định nghĩa bạn có thể nhìn thấy trong JsonMethods trait:

def render(value: JValue)(implicit formats: Formats = DefaultFormats): T 
def compact(d: T): String 
def pretty(d: T): String 

Phương pháp render trả về một kiểu generic T, đó là sự xâm nhập nhập cho các phương thức compactpretty.

Có hai hiện thực của phương pháp render trong json4s dự án, theo mẹ đẻjackson hương vị ... Tôi đã kiểm tra mã một cách hời hợt chỉ nhưng cả hai đều dường như được lọc rỗng các yếu tố của đối tượng json theo các chiến lược khác nhau. Giả sử chuẩn bị sẵn sàng cho các phương thức pretty và/hoặc compact để bắt đầu?