12

我们有一个表格,其中有一个用于科学应用程序的长段落,其中包含符号 beta(ß-arrestin) 等字符。我们有一个在 Mule 上运行的 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

科学家们编写的表单元素我们无法控制。因此,在 Mule 方面,我们如何像 java 具有 URLEncoded 一样自动转义这些字符。非常感谢

4

2 回答 2

3

在目标,您可以接收文本/纯文本形式的数据。

通过运行清理它:

input.replaceAll("\\p{Cc}", "").

使用任何 JSON 库将其转换回 JSON 数据:

JSONObject inputParams = JSONObject.fromObject(input);

希望能帮助到你。

于 2015-04-22T09:48:16.997 回答
2

在您的情况下,看起来传入的数据格式不正确。它必须采用JSON 规范支持的编码:UTF-8(默认)、UTF-16 或 UTF-32。所以不确定以下是否适用。尽管如此...

对于大多数应用程序,我会推荐JSON to Object mapping,这将负责转义。否则,您可以直接调用 Jackson(Mule 使用的 JSON 库)的String 转义方法

这是您可以在 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>
于 2016-02-01T06:05:46.833 回答