Как игнорировать поле в Spray-JSON [Scala] - PullRequest
0 голосов
/ 08 июня 2018

Я использую Spray-JSON в SCALA. SPRAY-Github Я хочу исключить (игнорировать) некоторые поля из ответа json.Какова лучшая практика?

package ru.steklopod

import org.scalatest.FunSuite
import ru.steklopod.entities.{Game, Helper}
import spray.json.{DefaultJsonProtocol, _}

trait MyJsonProtocol extends DefaultJsonProtocol {
  implicit val gameFormat = new JsonWriter[Game] {
    def write(g: Game): JsValue = {
      JsObject(
        "id" -> g.id.toJson,
        "next_step" -> JsNumber(g.nextStep),
        "won" -> g.won.toJson,
        "finished" -> JsBoolean(g.finished),
        "players" -> JsString(g.players),
        "steps" -> JsNumber(g.steps),
        "size" -> JsString(g.size),
        "crosses_length_to_win" -> JsNumber(g.crossesLengthToWin),
        "field" -> JsString(g.fieldPlay)
      )
    }
  }
}

class JsonTest extends FunSuite with MyJsonProtocol {
  test("JSON") {
    val game = new Game(1, None, false, "1, 2", 0, Helper.ThreeByThree.toString, 3, "0, 0, 0, 0, 0, 0, 0, 0, 0")
    val marshalled = game.toJson
    println(marshalled)
  }
}

Конечный объект маршалинга:

{"players":"1, 2","size":"3, 3","field":"0, 0, 0, 0, 0, 0, 0, 0, 0","finished":false,"id":1,"next_step":1,"crosses_length_to_win":3,"steps":0,"won":null}

1 Ответ

0 голосов
/ 08 июня 2018

В Scala принято обрабатывать или изменять сложные неизменяемые объекты, используя подход, называемый объектив / линзы .Есть несколько линз для spray-json: gist и library .

Возможно, это слишком сложно для вашего решения, и вы можете просто изменить несколько полей из объекта JSON ( JsObject.fields ), а затем создать новый объект JSON.

...