我有一个非常简单的例子:
import org.json4s._
import org.json4s.native.JsonMethods._
import org.json4s.JsonDSL._
val json = ("english" -> JString("serialization")) ~ ("japanese" -> JString("??????????"))
println(pretty(render(json)))
Run Code Online (Sandbox Code Playgroud)
我得到的是:
{
"english":"serialization",
"japanese":"\u30b7\u30ea\u30a2\u30e9\u30a4\u30bc\u30fc\u30b7\u30e7\u30f3"
}
Run Code Online (Sandbox Code Playgroud)
我想要的是这个(完全有效的AFAIK)JSON:
{
"english":"serialization",
"japanese":"??????????"
}
Run Code Online (Sandbox Code Playgroud)
我现在找不到它,但我想我已经读过JSON只需要两个特殊的UTF-8字符进行转义的地方.
查看渲染代码,看起来Strings总是为非ASCII字符获得额外的双重转义.
任何人都知道如何在没有双重转义所有UTF-8扩展字符的情况下获得有效的JSON?这似乎是一个非常类似的问题:为什么PHP json_encode函数将UTF-8字符串转换为十六进制实体?
更新:事实证明这是json4s中的一个未解决的问题,有一个未决的PR#327关闭了PR#339,而PR#339又在2016年2月13日的提交中合并到3.4版本分支中.