Как получить ключи и значения при разборе Json с использованием Scala-Play Json Framework? - PullRequest
0 голосов
/ 02 апреля 2019

У меня есть файл json, в котором есть некоторые ключи и значения. Мне нужно разобрать Json и распечатать ключи и их значения. Например, файл JSON, как показано ниже. Я хочу напечатать это в виде ключей и значений

{
   "Parcer":[
      {
         "key":"0203",
         "value":{
                  "Encryption":
                               {
                                 "enabled":"yes",
                                 "encryption_type":"base64",
                                 "key":"334848484",
                                 "return":"name"
                                 }
                  }
      },
      {
         "key":"0405",
         "value":{
            "Encryption":
                        {
                           "enabled":"yes",
                           "encryption_type":"base64",
                           "key":"334848484",
                           "return":"none"
                        },
            "Parcer":[
                        {
                           "key":"0102",
                           "value":"humidity"
                        },
                        {
                           "key":"0304",
                           "value":{
                                    "Encryption":{
                                                   "enabled":"yes",
                                                   "encryption_type":"SHA1",
                                                   "key":"1211212",
                                                       "return":"none"
                                                }
                                        }
                            }
                         ]

                }
          }],
  }```

1 Ответ

1 голос
/ 02 апреля 2019

Самый простой способ - создать case class, например:

case class MyObj(header:String, value: Seq[Map[String, String]])

Затем вам просто нужно добавить одну строку для сортировки, например:

import play.api.libs.json._

object MyObj {
  implicit val jsonFormat: OFormat[MyObj] = Json.format[MyObj]
}

Теперь вы получитехороший case class, с которым вы можете работать:

  val json =
    Json.parse(
      """{
   "header" : "header value",
   "value" : [
        {
         "a" : "a_val",
         "b" : "b_val",
         "c" : "c_val"
        },
        {
        "a" : "a_val",
         "b" : "b_val",
         "c" : "c_val"
        }
     ]
}""")

Вот пример, как получить все "a".

  json.validate[MyObj] match {
    case JsSuccess(myObj, _) =>

      val allAs =myObj.value.flatMap(m => m.get("a").toSeq)
      println(allAs) // >> Vector(a_val, a_val)
    case e:JsError => // handle error
  }

Это дает вам:

json.validate[MyObj] возвращает JsSuccess(MyObj(header value,Vector(Map(a -> a_val, b -> b_val, c -> c_val), Map(a -> a_val, b -> b_val, c -> c_val))),)

Возвращает println: Vector(a_val, a_val)

Это описано здесь в документации: Автоматическое отображение JSON

...