【发布时间】:2016-05-12 03:25:18
【问题描述】:
我有一个非常简单的例子:
import org.json4s._
import org.json4s.native.JsonMethods._
import org.json4s.JsonDSL._
val json = ("english" -> JString("serialization")) ~ ("japanese" -> JString("シリアライゼーション"))
println(pretty(render(json)))
我从中得到的是:
{
"english":"serialization",
"japanese":"\u30b7\u30ea\u30a2\u30e9\u30a4\u30bc\u30fc\u30b7\u30e7\u30f3"
}
我想要的是这个(完全有效的 AFAIK)JSON:
{
"english":"serialization",
"japanese":"シリアライゼーション"
}
我现在找不到它,但我想我在某处读到 JSON 只需要转义两个特殊的 UTF-8 字符。
查看render 的代码,似乎是Strings always get this extra double-escaping for non-ASCII characters。
任何人都知道如何在不双重转义所有 UTF-8 扩展字符的情况下获得有效的 JSON 吗?这似乎与以下问题非常相似:Why does the PHP json_encode function convert UTF-8 strings to hexadecimal entities?
更新:事实证明,这是 json4s 中的一个未解决问题,带有待处理的 PR #327,该问题已被关闭以支持 PR #339,而 PR #339 又合并到 @987654326 中的 3.4 发布分支@。
【问题讨论】:
-
我不知道 json4s,但是RFC 7159 说 UTF-8 是 JSON 的默认编码。所以理论上没有必要(只有一个选项)来转义日文字符。您只需要一个可以执行此操作或可以进行相应配置的库。
标签: json scala serialization utf-8 json4s