2016-09-06 28 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,"?","\\\\?") 

这应该替换的任何实例?与\?并将其重新写入有效负载变量。也就是说,当你在程序中稍后对它进行评估时,它听起来像有效载荷可能实际上是空的,这可能表明一个更大的问题。