У меня действительно простой пример:
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, кажется, что Строки всегда получайте это дополнительное двойное экранирование для символов, отличных от ASCII.
Кто-нибудь знает, как я могу получить действительный JSON без двойного экранирования всех расширенных символов UTF-8? Это похоже на очень похожую проблему: Почему функция json_encode PHP преобразует строки UTF-8 в шестнадцатеричные сущности?
Обновление. Оказывается, это открытая проблема в json4s с ожидающим PR # 327, который был закрыт в пользу PR # 339, который, в свою очередь, слился с веткой релиза 3.4 в совершить 13 февраля 2016 года.