В общем есть нереляционная БД, в которую записываются JSON объекты. Обычно это массив. Проблема, с которой я борюсь, это кириллица, которая записывается по-волшебному (\uxxx). Здесь говорят, что это нормально.
Но я так не считаю, ибо смотреть эту шляпу, заглядывая в базу, не комильфо. С латиницей в это же время все ок.
Сейчас работает все так. Есть компонент на форме(JSF), в который вставляется значение JSON как String
Выглядит это так:
function updateComponentWithJSONArray(nameOfComponent2Update, JSONArray2Update)
{
getComponent(nameOfComponent2Update).setValue(new ru.generate.doc.JSONCyrillic.makeCyrillicGreatAgain(toJson(JSONArray2Update)));
// Метод toJson возвращает String из JSONObject
}
Я решил эту проблему вызовом следующего кода. String utils
public static String makeCyrillicGreatAgain(String jsonAsString)
{
return StringEscapeUtils.unescapeJava(jsonAsString);
}
И все вроде бы работало, но потом я забавы ради решил двойные кавычки добавить. Ну и все накрылось после этого. Теперь простейший JSON объект типа {"companyName":"ООО "Рога и копыта""} именно так и анэскейпится, вместо того, чтобы \" перед кавычками добавлять. Очень печалит это. В то же время можно вообще не вызывать этот unescape и оставить все так:
function updateComponentWithJSONArray(nameOfComponent2Update, JSONArray2Update)
{
getComponent(nameOfComponent2Update).setValue(toJson(JSONArray2Update));
// Метод toJson возвращает String из JSONObject
}
Но тогда заказчику вместо того, чтобы писать ООО "Рога и копыта", придется учить англ, чтобы вместо этого написать "Horns and hooves" LTD, или, того хуже, OOO "Roga i Kopyta". Кавычки нужны и обязательны.
Собственно, вопрос:
Возможно ли каким-нибудь образом сделать unescape, чтобы каждое значение (именно значение, за ключи я уверен) JSON объекта, заменили все " внутри значения на \"? Но это ведь дороха получается... Рекурсивно пройтись по всем JSON объектам, проверить каждое значение... Может, как-то по-другому можно эту проблему решить?