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ì?
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ì?
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ả.
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.
Đối tượng JSON không bị giới hạn chỉ có chuỗi cho khóa không? –
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. –
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