我从消息队列中收到以下字符串,不带双引号;
{
tableName:STUDENT,
columns: [{
name: PARENT_PHONE,
regex:{
regexCode:PHONE,
regexValue:[0-9\-\+]{9,15}
}
}]
}
这是一个字符串,我试图将其解析为如下的对象;
TableDefinition tableDefinition = gson.fromJson(tableJson, TableDefinition.class);
当然它会抛出一个异常,比如;
Expected a string but was "BEGIN_ARRAY" at line ...
我理解regexValue
应该以有效字符开始,而不是[
,然后我编写了一个自定义反序列化器来解析regexValue属性。
现在是抛出malformmedjsonexception和调试断点甚至不停止自定义反序列化方法;
com.google.gson.stream.MalformedJsonException: Unterminated array at line 1 column 325 path $.columns[0].regex.regexValue[1]
如exception所示,Gson仍然将regexValue识别为数组。
如何告诉Gson, regexValue是一个字符串?如何处理这种情况?
你不能编写一个自定义序列化器来一个畸形的JSON。如果它是畸形的,那么它就不再是JSON了,Gson就不能对一个随机字符串做出任何假设。最好的办法是修复发送到队列的内容,如果这是不可行的,那么你将不得不修复当前格式错误但仍为json的字符串。