미리 말 함

import scala.util.parsing.json._ 를 이용하는 json parser 는 엄청나게 느리다.

이거 말고 다른 json parser 를 사용하길 권장함.

 

여튼 json parser 사용 예제는 아래와 같음.

 

참고 : stackoverflow.com/a/4186090/5868252

 


import scala.util.parsing.json._

val json =
    """
{
  "event": "click",
  "properties": {
    "version": "0.2",
    "id": "eyeballs",
    "blahblah": [
      {
        "a": "news1",
        "b": "abc"
      },
      {
        "a": "news2",
        "b": "wwf"
      },
      {
        "a": "news3",
        "b": "def"
      },
      {
        "a": "news4",
        "b": "ghr"
      }
    ],
    "url": "https://eyeballs.tistory.com/",
    "booleanvalue": true,
    "screenSize": "1680x1050",
    "clientDocSize": "1663x939",
    "time": 20200812,
    "version": "A12"
  }
}
    """.stripMargin


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]

val result = for {
    Some(M(map)) <- List(JSON.parseFull(json))
    S(event) = map("event")
    M(properties) = map("properties")
    S(url) = properties("url")
    D(time) = properties("time")
   
} yield {
    (event, url, time.toInt)
}


val jsonString =
    """
      {
        "languages": [{
            "name": "English",
            "is_active": true,
            "completeness": 2.5
        }, {
            "name": "Latin",
            "is_active": false,
            "completeness": 0.9
        }]
      }
    """.stripMargin

val result = 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)
}

 

 

Spark 에서 위의 코드를 실행하다가 Task not serializable: java.io.NotSerializableException 에러가 나면 

아래처럼 Serializable 을 사용해본다.

 

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

 

stackoverflow.com/a/22596875/5868252

 

 

 

 

json 을 사용하는 다른 lib 소개 : https://stackoverflow.com/questions/29867579/what-to-use-in-the-face-of-deprecation-of-the-scala-util-parsing-json-package

https://www.slideshare.net/nestorhp/scala-json-features-and-performance

아래 링크는 인터넷 서핑하다가 본건데

실제로 잘 작동하는지, 사용하기 편한지는

한 번 봐야 함

https://github.com/seanparsons/jsonar

+ Recent posts