Play JSON将如何将字段值写入正确的字段

Play JSON将如何将字段值写入正确的字段,json,scala,playframework,playframework-2.3,Json,Scala,Playframework,Playframework 2.3,我试图在更深的层次上理解写作,而不仅仅是接受它,我知道它是有效的。我感到困惑的是,在取消应用并提升T之后,我的理解是,您将以一组值结束。如果这些值都是同一类型的,例如下面的double,那么如何将它们匹配到正确的位置?我想知道这是否和组合子的顺序有关,但本地实验似乎表明顺序并不重要。播放文档的ScalaJsonCombinators页面中的示例: case class Location(lat: Double, long: Double) import play.api.libs.json._

我试图在更深的层次上理解写作,而不仅仅是接受它,我知道它是有效的。我感到困惑的是,在取消应用并提升T之后,我的理解是,您将以一组值结束。如果这些值都是同一类型的,例如下面的double,那么如何将它们匹配到正确的位置?我想知道这是否和组合子的顺序有关,但本地实验似乎表明顺序并不重要。播放文档的ScalaJsonCombinators页面中的示例:

case class Location(lat: Double, long: Double)

import play.api.libs.json._
import play.api.libs.functional.syntax._

implicit val locationWrites: Writes[Location] = (
 (JsPath \ "lat").write[Double] and
 (JsPath \ "long").write[Double]
)(unlift(Location.unapply))

这绝对与组合符的顺序与
位置中字段的顺序有关。请不要使用
,否则将无法确定写入
读取
写入

implicit val locationWrites: Writes[Location] = (
  (JsPath \ "lat").write[Double] and
  (JsPath \ "long").write[Double]
)(unlift(Location.unapply))

scala> Json.stringify(Json.toJson(Location(2.11, 42.12)))
res2: String = {"lat":2.11,"long":42.12}
写入
中的路径名与
位置
的字段名无关,它只是按顺序应用它们:

// Reversed
implicit val locationWrites: Writes[Location] = (
  (JsPath \ "long").write[Double] and
  (JsPath \ "lat").write[Double]
)(unlift(Location.unapply))

scala> Json.stringify(Json.toJson(Location(2.11, 42.12)))
res3: String = {"long":2.11,"lat":42.12}