Scala 通过重写JsonPrinter处理json中的Unicode
在尝试Scala/Spray的第一步时,我在Spray json中正确处理unicode时遇到了一个问题 例如:á在json中生成\u00e1。生成的标题指示UTF-8以及正确的设置auf-Dfile.encoding=UTF-8,该设置在Scala的System.properties中显示UTF-8 我找到了一个可能的解决办法 但我很羞愧地承认我不知道如何实现这一点,因为我没有直接处理JsonPrinter。 以下是我所拥有的: JSON协议:Scala 通过重写JsonPrinter处理json中的Unicode,scala,spray,spray-json,Scala,Spray,Spray Json,在尝试Scala/Spray的第一步时,我在Spray json中正确处理unicode时遇到了一个问题 例如:á在json中生成\u00e1。生成的标题指示UTF-8以及正确的设置auf-Dfile.encoding=UTF-8,该设置在Scala的System.properties中显示UTF-8 我找到了一个可能的解决办法 但我很羞愧地承认我不知道如何实现这一点,因为我没有直接处理JsonPrinter。 以下是我所拥有的: JSON协议: object PersonJsonProtoco
object PersonJsonProtocol extends DefaultJsonProtocol {
implicit object PersonJsonFormat extends RootJsonFormat[Person] {
def write(per: Person) = JsObject(
"name" -> JsString(per.name),
"surname" -> JsString(per.surname),
"addresses" -> JsArray(per.addresses.toList.map(_.toJson))
)
Person类中的简单映射:
val simple = {
get[String]("person_code") ~
get[String]("name") ~
get[String]("surname") map {
case person_code~name~surname =>
new Person(person_code, name, surname, adressDao.findAll(person_code))
}
}
路由内的DB呼叫:
ctx: RequestContext => ctx.complete(StatusCodes.OK, personDAO.findAll())
所以我的问题是,如何在JsonPrinter中覆盖printString方法。
我将感谢任何帮助。提前谢谢你 Spray使用trait
Spray.httpx.PlayJsonSupport提供的封送器来封送播放json值。在该特性中,它为范围内隐式可用的Writes
类型定义封送器
implicit def playJsonMarshaller[T: Writes](implicit printer: JsValue => String = Json.stringify) = ???
如您所见,至少在版本1.3.1中,您可以通过在作用域中提供隐式的Function1[JsValue,string]
来覆盖JsValue转换为字符串的方式。例如,在PersonJsonProtocol
的范围内定义以下方法,使用问题中链接的解决方案作为实现,应该会得到期望的结果
implicit def noUnicodeEscPrettyPrinter(json: JsValue): String = NoUnicodeEscPrettyPrinter(json)
对于后代来说,这是spray json中需要解决的相关问题。@DaveSwartz谢谢。所以唯一的办法似乎是找到一个非官方的解决办法。