Scalatest matchers for Json with appropriate equality and descriptive error messages.
Add the dependency you want
libraryDependencies += "com.stephenn" %% "scalatest-json-jsonassert" % "0.2.0"
libraryDependencies += "com.stephenn" %% "scalatest-json4s" % "0.2.0"
libraryDependencies += "com.stephenn" %% "scalatest-play-json" % "0.2.0"
libraryDependencies += "com.stephenn" %% "scalatest-circe" % "0.2.0"
libraryDependencies += "com.stephenn" %% "scalatest-argonaut" % "0.2.0"
libraryDependencies += "com.stephenn" %% "scalatest-jsoniter-scala" % "0.2.0"You can also check the latest version on maven central.
Your scalatest spec should extend or import JsonMatchers
class ExampleSpec extends FunSpec with Matchers with JsonMatchers {
  describe("JsonMatchers usage") {
    it("should pass matching json with different spacing and order") {
      val input = """
        |{
        | "some": "valid json",
        | "plus": ["json", "content"]
        |}
      """.stripMargin
      val expected = """
                    |{
                    | "plus": ["json", "content"],
                    |     "some":   "valid json"
                    |}
                  """.stripMargin
      input should matchJson(expected)
    }
    it("should fail on slightly different json explaining why") {
      val input = """
                    |{
                    | "someField": "valid json"
                    |}
                  """.stripMargin
      val expected = """
                       |{
                       | "someField": "different json"
                       |}
                     """.stripMargin
      input should matchJson(expected)
//
//      Fails
//
//      Json did not match {
//      "someField": "valid json"
//      } did not match {
//      "someField": "different json"
//      }
//
//      Json Diff:
//        someField
//      Expected: different json
//        got: valid json
    }
  }
}
For Jsoniter Scala the data structures and corresponding codec shall be defined, eg.:
  import com.github.plokhotnyuk.jsoniter_scala.core.JsonValueCodec
  import com.github.plokhotnyuk.jsoniter_scala.macros.JsonCodecMaker
  case class Data(some: String, plus: Seq[String])
  
  implicit val codec: JsonValueCodec[Data] = JsonCodecMaker.makePlease find a complete example here.
For the circe module you write a golden test that encodes and decodes a model, checking that it matches a golden example json.
it("can compare json and a model") {
    case class Foo(sameField: String)
    implicit val encoder = Encoder.forProduct1("someField")(Foo.unapply)
    implicit val decoder = Decoder.forProduct1("someField")(Foo.apply)
    
    val json = """
                |{
                | "someField": "valid json"
                |}
              """.stripMargin
    
    val model = Foo("valid json")
    
    model should matchJsonGolden(json)
}Done from github actions using sbt-ci-release
eg
./release 'v0.2.5'