2016-09-06 6 views
0

memsql JSON型の列にJSONペイロードを挿入しようとしていますが、以下の理由により失敗しています。
JSONのコンテンツには'?'という文字が含まれています。
'?'を次の方法でエスケープしようとしましたが、うまくいきません。特殊文字「?」をエスケープする方法memsqlに挿入中

私は取得しています例外は次のとおりです。

Root Exception stack trace: 
java.lang.IndexOutOfBoundsException: Index: 0 

例ペイロード: "疑問符内容?"

1. #[org.mule.util.StringUtils.replace(payload,"?","\\?")] 

結果: "疑問符の内容\"

2. #[org.mule.util.StringUtils.replace(payload,"?","\?")] 

結果:私はペイロード「疑問符の内容を」使用している場合は、それが正常に挿入された上記の式

を使用することはできません。

'?'をJSONコンテンツにエスケープするにはどうすればよいですか?memsqlに保存してください。

+0

理論上、私はあなたのコードに間違いがないと見ています。挿入されている他の特殊文字がないことを保証するために、置き換えられた後に出力することができます。質問を正確なエラー/文字列で更新できますか? –

+0

@A_Elric私は上記の式のエラーと結果で質問を更新しました。それを見てください。 – MVS

答えて

0

'\?'それ自体はエスケープシーケンスなので、 "\\?"を使用する必要があります。これは "\?" memsqlで動作するはずです。

#[org.mule.util.StringUtils.replace(payload,"?","\\\\?")] 

希望します。

+0

@ anupambhusari私は上記の表現を試みました。上記の式の後の結果は '\\?'です。しかし、まだ動作していません。 – MVS

0

例外の外見からは、ペイロードを置き換えるように見えているようですが、何にも割り当てられていません。ドキュメントのオフに行く

http://grepcode.com/file/repo1.maven.org/maven2/commons-lang/commons-lang/2.4/org/apache/commons/lang/StringUtils.java#3457

これは、基本的には、文字列内の項目を置換しようとしていることを言うと、この方法自体は、文字列を返します。私がスタックトレースで知ることに基づいて、nullまたは初期化されていない変数をstr [0]を解析しようとしているものに渡しているように見えます。のいずれかのインスタンスを置き換える必要があり

payload = org.mule.util.StringUtils.replace(payload,"?","\\\\?") 

:これを修正するために

の方法は、のような何かをするだろうか? \で?それをペイロード変数に書き戻します。つまり、後でプログラムで評価するときにペイロードが実際にはnullになる可能性があります。これは大きな問題を示す可能性があります。

関連する問題