2016-09-06 63 views
0

我試圖插入JSON有效負載到memsql 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

它基本上說,這是試圖取代字符串中的項目,方法本身返回一個字符串。根據我在堆棧跟蹤中可以看到的情況,似乎您正在將空或未初始化的變量傳遞給試圖分析str [0]的東西,該str [0]返回數組越界錯誤。

糾正這將是這樣做的方式:

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

這應該替換的任何實例?與\?並將其重新寫入有效負載變量。也就是說,當你在程序中稍後對它進行評估時,它聽起來像有效載荷可能實際上是空的,這可能表明一個更大的問題。