2014-09-18 14 views
12

Map [String, Any] sprey-json ile nasıl serileştiririm? Ben Cannot find JsonWriter or JsonFormat type class for scala.collection.immutable.Map[String,Any]Cannot find JsonWriter or JsonFormat type class for scala.collection.immutable.Map[String,Any] diyor.Harita [String, Any] sprey json ile

cevap

21

İşte bu görevi yapmak için kullanılan örtük bir dönüştürücü var:

implicit object AnyJsonFormat extends JsonFormat[Any] { 
    def write(x: Any) = x match { 
     case n: Int => JsNumber(n) 
     case s: String => JsString(s) 
     case b: Boolean if b == true => JsTrue 
     case b: Boolean if b == false => JsFalse 
    } 
    def read(value: JsValue) = value match { 
     case JsNumber(n) => n.intValue() 
     case JsString(s) => s 
     case JsTrue => true 
     case JsFalse => false 
    } 
    } 

O Sprey kullanıcı grubunda this post uyarlanmıştır, ama ben alamadım ve iç içe Sıraları ve Maps yazmaya gerek yoktu Json'a, onları çıkardım. senin durumda çalışmalıdır

+2

Müthiş olduğunu. Sadece bu nesneyi ona bildiren diğer JsonFormat örtüşmelerinden ÖNCE bildirdiğimden emin olmalıyım – Bogdan

+1

Kodunuzda bir '}' eksik. – dividebyzero

+0

Gerçekten. Güncellenmiş. – Gangstead

5

Diğer bir seçenek, bu benim için çalışıyor,

data.parseJson.convertTo[Map[String, JsValue]] 
+0

Bunu bahsettim, çünkü birçok durumda değerlerin JsValue değerini kullanabiliyordum. insanlar için yeterli olun. Ayrıca, Any'ın idaresinden daha fazla spray.json zihniyetine, imho'ya daha fazla uyuyor. – akauppi

+2

'data',' Map [String, Any] 'türündendir - parseJson' yöntemine sahip olmak için ne almalıyım? – mirelon