Как избежать специальных символов в JSON
У нас есть форма, которая имеет длинный абзац для научного приложения, содержащего символы, такие как символ beta(ß-arrestin) и т. д. У нас есть служба JSON, работающая на муле, которая принимает данные и сохраняется в базе данных oracle. Этот конкретный элемент с длинным абзацем дает мне ошибку в RAML / JSON. Ниже приведена ошибка
com.fasterxml.jackson.core.JsonParseException: Illegal unquoted character ((CTRL-CHAR, code 9)): has to be escaped using backslash to be included in string value
элемент формы, к которому пишут ученые, мы не контролируем. Итак, на стороне Мула, как мы можем избежать этих персонажей автоматически, как java имеет URLEncoded. Большое Спасибо
2 ответов
в вашем случае похоже, что входящие данные искажены. Он должен быть в кодировка, поддерживаемая спецификацией JSON: UTF-8 (по умолчанию), UTF-16 или UTF-32. Поэтому не уверен, применимо ли следующее. Тем не менее...
для большинства приложений я бы порекомендовал JSON для отображения объектов, который позаботится о побеге. В противном случае вы можете вызвать Jackson's (библиотеку JSON, используемую Mule) метод побега строки напрямую.
вот пример, который вы можете использовать в MEL. String.valueOf
нужно, потому что quoteAsString
возвращает char[]
:
<configuration>
<expression-language>
<import class="org.codehaus.jackson.io.JsonStringEncoder" />
<global-functions>
def quoteJSONString(s) {
String.valueOf(JsonStringEncoder.getInstance().quoteAsString(s))
}
</global-functions>
</expression-language>
</configuration>
в цели вы можете получить данные в виде текста / plain.
очистите его, запустив:
input.replaceAll("\p{Cc}", "").
преобразуйте его обратно в данные JSON, используя любую библиотеку JSON:
JSONObject inputParams = JSONObject.fromObject(input);
надеюсь, что это помогает.