我更喜欢使用擅长处理大文件的 Jackson 库。
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException;
private Boolean isValidJson(String maybeJson){
try {
final ObjectMapper mapper = new ObjectMapper();
mapper.readTree(maybeJson);
return true;
} catch (IOException e) {
return false;
}
}
我编写了一些测试来检查这种方法的行为。
Assert.assertThat(isValidJson("{\"token_type\":\"bearer\",\"access_token\":\"AAAA%2FAAA%3DAAAAAAAA\",\"scope\": \"scope of the token\",\"expires_in\": 200,\"refresh_token\":\"fdb8fdbecf1d03ce5e6125c067733c0d51de209c\"}"), Is.is(true));
Assert.assertThat(isValidJson("[ \"Ford\", \"BMW\", \"Fiat\" ]\n"), Is.is(true));
Assert.assertThat(isValidJson(""), Is.is(false));
Assert.assertThat(isValidJson("Lachlan"), Is.is(false));
Assert.assertThat(isValidJson("{ key: value }"), Is.is(false));
将此解决方案重新集成到您的代码中。我假设您会将验证代码放在同一个类中。
while (rs.next()) {
for (String column : columnsList.split(",")) {
String maybeJson = rs.getString(column)
//check whether rs.getString(column) is a valid JSON String?
if(isValidJson(maybeJson)) {
System.out.println("Valid JSON String data")
}
}
}
考虑根据什么值和期望的行为添加一个空检查。