scala - доступ к значениям из Option [List [Map [String, String]]] - PullRequest
0 голосов
/ 07 мая 2020

Я пытаюсь разобрать строковое значение json.

val schema = "{\"type\":\"struct\",\"fields\":[{\"name\":\"name\",\"type\":\"string\",\"nullable\":true,\"metadata\":{}},{\"name\":\"age\",\"type\":\"integer\",\"nullable\":false,\"metadata\":{}}]}"

val jsonMap = JSON.parseFull(schema).getOrElse(0).asInstanceOf[Map[String,Any]]
val fields = jsonMap.get("fields")
val temp = fields.map(_.asInstanceOf[List[Map[String, String]]])
temp.foreach(_.get("name"))

ошибка

<console>:29: error: value get is not a member of List[Map[String,String]]
       temp.foreach(_.get("name"))
                      ^

Мне нужно создать карту сверху json, которая имеет следующие значения map ("name" -> "type ") для каждого значения в полях.

Map("name"->"String", "age"->"integer")

1 Ответ

0 голосов
/ 07 мая 2020

temp - это Option. Вы можете использовать этот стиль, чтобы получить значение, если оно доступно. Публикация полного файла образца кода.

import scala.util.parsing.json.JSON
object Test extends App {
  val schema = "{\"type\":\"struct\",\"fields\":[{\"name\":\"name\",\"type\":\"string\",\"nullable\":true,\"metadata\":{}},{\"name\":\"age\",\"type\":\"integer\",\"nullable\":false,\"metadata\":{}}]}"
  val jsonMap = JSON.parseFull(schema).getOrElse(0).asInstanceOf[Map[String,Any]]
  val fields = jsonMap.get("fields")
  val temp = fields.map(_.asInstanceOf[List[Map[String, String]]])
  val result = temp match {
    case Some(x) => x.foldLeft(Map[String, String]()) { (map, entry) => map + (entry("name") -> entry("type"))}
    case None => throw new Exception("Error")
  }
  print(result)
}

Результат

Map(name -> string, age -> integer)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...