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 からオブジェクトへのマッピングをお勧めします。それ以外の場合は、Jackson (Mule で使用される JSON ライブラリ) の文字列エスケープ メソッドを直接呼び出すことができます。

MEL で使用できる例を次に示します。を返すString.valueOfので必要です:quoteAsStringchar[]

<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 に答える