如何在JSON中转义特殊字符

hpa*_*lai 8 java json mule raml

我们有一个表格,其中包含一个scienctific应用程序的长段落,其中包含符号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
Run Code Online (Sandbox Code Playgroud)

科学家写的形式元素我们无法控制.所以在Mule方面,我们如何自动地逃避这些字符,就像java具有URLEncoded一样.非常感谢

kau*_*ish 6

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

通过运行清理它:

input.replaceAll("\\p{Cc}", "").
Run Code Online (Sandbox Code Playgroud)

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

JSONObject inputParams = JSONObject.fromObject(input);
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你。


ssh*_*haw 4

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

对于大多数应用程序,我建议使用JSON 到对象映射,这将处理转义。否则,您可以直接调用Jackson(Mule使用的JSON库)的字符串转义方法

以下是您可以在 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>
Run Code Online (Sandbox Code Playgroud)