Как избежать специальных символов в 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);

надеюсь, что это помогает.