Создание пользовательского определения JSON в Play Scala - PullRequest
0 голосов
/ 25 июня 2019

Я новичок в Scala и изучаю Scala и Play Framework: Я пытаюсь динамически создать Json с play / scala, начиная с последовательности данных с именем «таблицы», используя Map(...), List(...) и Json.toJson(...). Мой результат должен быть похож на код resultCustomJsonData, показанный ниже

var resultCustomJsonData = [
  {
    text: "Parent 1",
    nodes: [
      {
        text: "Child 1",
        nodes: [
          {
            text: "Grandchild 1"
          },
          {
            text: "Grandchild 2"
          }
        ]
      },
      {
        text: "Child 2"
      }
    ]
  },
  {
    text: "Parent 2"
  },
  {
    text: "Parent 3"
  },
  {
    text: "Parent 4"
  },
  {
    text: "Parent 5"
  }
];

мой код скалы это ниже:

val customJsonData = Json.toJson(
      tables.map { t => {
        Map(
          "text" -> t.table.name.name, "icon" -> "fa fa-cube", "nodes" -> List (
              Map( "text" -> "properties" )
          )
        )
      }}
    )

но я получаю эту ошибку:

No Json serializer found for type Seq[scala.collection.immutable.Map[String,java.io.Serializable]]. Try to implement an implicit Writes or Format for this type.

Ответы [ 2 ]

1 голос
/ 26 июня 2019

Вот способ сделать это без использования временного Map:

import play.api.libs.json.Json

val customJsonData = Json.toJson(
      tables.map { t =>  
        Json.obj( 
         "text" -> t.table.name.name, 
         "icon" -> "fa fa-cube",
         "nodes" -> Json.arr(Json.obj("text" -> "properties"))
         )
      } 
    )
1 голос
/ 25 июня 2019

Я думаю, вы должны попробовать реализовать собственный сериализатор / писатель. Отметьте здесь .

Например:

  implicit val userWrites = new Writes[User] {
    def writes(user: User) = Json.obj(
      "id" -> user.id,
      "email" -> user.email,
      "firstName" -> user.firstName,
      "lastName" -> user.lastName
    )
  }
...