我想检查是否完整的JSON字符串被转换为Map在下面的方法。
public boolean isCompleteStringParsedInToJson() {
boolean isParsed = false;
String str = "{ \"tierkey 1\": \"Application\", \"tierkey 2\": \"Desktop\", \"tierkey 3\": \"Software\"}, { \"tierkey 4\": \"Application1\", \"tierkey 5\": \"Desktop2\", \"tierkey 6\": \"Software2\"}";
ObjectMapper mapper = new ObjectMapper();
try {
Map map = mapper.readValue(str, Map.class);
//check if complete input string is parsed into Map above.
// then set isParsed flag accordingly.
} catch (JsonProcessingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return isParsed;
}
在上述情况下,只有“{“tierkey 1”:“应用程序”,“层密钥2”:“桌面”、“层密钥3”:“软件”}”部分作为Map返回。在实际场景中,JSON字符串将输入到方法中。在上述方法中,我只需要确定完整JSON字符串是否解析为Map的情况,然后相应地设置isParsed标志值(true或false)。方法中提到的JSON字符串不是严格的JSON,并且readValue不会因此类JSON字符串而失败。此外,不希望使用DeserializationFeature。FAIL_ON_TRAILING_ObjectMapper上的TOKENS。输入JSON字符串可以手动写入,因此键或值之前可能只有很少的空格。
在mapper.readValue之后应该有什么代码来检查是否完成了对Map的JSON字符串解析?
2条答案
按热度按时间z31licg01#
如果readValue()行没有抛出异常,这意味着解析成功,您可以将标志设置为true。2在“catch”块中,将标志设置为false。
cx6n0qe32#
问题是您的字符串包含2个单独的JSON。
请注意,在键
"tierkey 3"
之后有一个“}”,它关闭了第一个开头的“{”。因此,当解析Json并到达其结尾时,它将忽略后面的内容。因此,", { "tierkey 4": "Application1",...}"
中的部分将被忽略,这是正确的行为。如果要对其进行解析,请将字符串修改为或