我有一个非常简单的例子:
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的代码,似乎String总是对非ASCII字符进行这种额外的双转义。
有谁知道我如何在不对所有UTF-8扩展字符进行双转义的情况下获得有效的JSON吗?这看起来像是一个非常类似的问题:Why does the PHP json_encode function convert UTF-8 strings to hexadecimal entities?
更新:事实证明,这是json 4s中的一个未决问题,其中有一个未决的PR #327,该PR #327已被关闭,而PR #339又在2016年2月13日的提交中合并到3.4版本分支中。
1条答案
按热度按时间5tmbdcev1#
***@0__***,不清楚您的赏金想要得到什么答案。原问题中提到的bug已经修复,您可以自定义是否需要Unicode字符编码。您只需要使用当前版本构建即可,例如使用
build.sbt
,如下所示:正如***@kriegaex***在他的评论中提到的,根据RFC 7159,UTF-8是JSON的默认编码,所以编码并不是严格必要的。这就是为什么默认情况下 * json 4s * 不编码,正如OP所要求的:
控制台日志:
但是,如果出于兼容性原因,您需要对输出进行编码,json 4s也支持。如果您像这样添加自己的
customJsonFormats
,您将得到编码后的输出:控制台日志: