2012-07-08 29 views
5

Dường như thang máy-json bị giới hạn đối với các bản đồ có các chuỗi là khóa.Sắp xếp lại một bản đồ không có chuỗi là chìa khóa với thang máy-json

Cách tốt nhất để vượt qua giới hạn này là gì?

+0

Đối tượng JSON không bị giới hạn chỉ có chuỗi cho khóa không? –

+0

Có, đối tượng JSON bị giới hạn chỉ có chuỗi cho khóa. Họ là, như một vấn đề thực tế, tên phương pháp, vì vậy nó phù hợp. –

+0

Vâng, câu hỏi của tôi là làm thế nào bạn có thể (de) serialize bản đồ mà không có chuỗi như là chìa khóa kể từ khi có giới hạn này. – Atol

Trả lời

5

Xác định Serializer[Map[Any, Any]] của riêng bạn.

import net.liftweb.json._ 
import ext._ 

object MapSerializer extends Serializer[Map[Any, Any]] { 
    def serialize(implicit format: Formats): PartialFunction[Any, JValue] = { 
    case m: Map[_, _] => JObject(m.map({ 
     case (k, v) => JField(
     k match { 
      case ks: String => ks 
      case ks: Symbol => ks.name 
      case ks: Any => ks.toString 
     }, 
     Extraction.decompose(v) 
    ) 
    }).toList) 
    } 

    def deserialize(implicit format: Formats): PartialFunction[(TypeInfo, JValue), Map[Any, Any]] = { 
    sys.error("Not interested.") 
    } 
} 

Sau đó thêm nó vào biến số Formats ẩn.

implicit val formats = DefaultFormats + MapSerializer 

Đó là tất cả.

0

Ngoài các câu trả lời trước bạn có thể xác định thay vì:

def deserialize (định dạng ngầm: Các định dạng): PartialFunction [(TypeInfo, JValue), Bản đồ [Bất kỳ, Bất kỳ]] = { Map() }

Điều này không vi phạm bất kỳ việc xử lý bản đồ hoạt động nào khác.

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