SORU
13 Kasım 2010, CUMARTESİ


Nasıl ayrıştırma Scala standart Scala sınıfları kullanarak JSON için?

Scala 2.8 inşa JSON sınıfı JSON kodu ayrıştırmak için kullanıyorum. Liftweb bir ya da başka minimize bağımlılıkları nedeniyle kullanmak istemiyorum.

Bunu yapıyorum yolu da şart gibi görünüyor, bunu yapmanın daha iyi bir yolu var mı?

import scala.util.parsing.json._
...
val json:Option[Any] = JSON.parseFull(jsonString)
val map:Map[String,Any] = json.get.asInstanceOf[Map[String, Any]]
val languages:List[Any] = map.get("languages").get.asInstanceOf[List[Any]]
languages.foreach( langMap => {
val language:Map[String,Any] = langMap.asInstanceOf[Map[String,Any]]
val name:String = language.get("name").get.asInstanceOf[String]
val isActive:Boolean = language.get("is_active").get.asInstanceOf[Boolean]
val completeness:Double = language.get("completeness").get.asInstanceOf[Double]
}

CEVAP
15 Kasım 2010, PAZARTESİ


Bu bir çözüm sınıf dökme yapacak presi dayanır:

class CC[T] { def unapply(a:Any):Option[T] = Some(a.asInstanceOf[T]) }

object M extends CC[Map[String, Any]]
object L extends CC[List[Any]]
object S extends CC[String]
object D extends CC[Double]
object B extends CC[Boolean]

for {
    Some(M(map)) <- List(JSON.parseFull(jsonString))
    L(languages) = map("languages")
    M(language) <- languages
    S(name) = language("name")
    B(active) = language("is_active")
    D(completeness) = language("completeness")
} yield {
    (name, active, completeness)
}

Döngü başında ben sonunda bir liste verir, böylece yapay bir liste sonucu sarın. Döngü geri kalanı daha sonra jeneratörler (<-) ve değeri tanımlar (=) kullanarak uygulamayı kaldırma yöntemleri kullanacak gerçeği kullanıyorum.

(Eski cevap - eğer merak ediyorsanız Düzenleme Geçmişi) düzenlenmiş kontrol edin

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Kyletiv7

    Kyletiv7

    28 Mayıs 2007
  • ::..ηєѕѕ мιχ..::

    ::..ηєѕѕ

    15 Aralık 2006
  • PhoneArena

    PhoneArena

    7 NİSAN 2006