当前,我正在研究与BLE通讯相关的应用程序之一,其中BLE设备以JSON格式发送数据。我有一个要求,以确保在传递给调用者方法之前,接收到的数据应为JSON格式。
因此,我创建了一个JSON验证程序,该程序将验证收到的响应应具有预期的字段名以及JSON对象和数组符号。这是JSONValidator Kotlin代码,它正在测试JSON对象和数组符号。
class JSONValidator: StringValidator() {
private val jsonArray = "(^\\[|]\$)"
private val jsonObject = "([{}])"
private val jsonArrayAndObject = "(^\\[\\{|}]\$)"
override fun isStringValid(s: String?): Boolean {
return if (s == null || s.isEmpty()) {
false
} else {
doesPacketContainJson(s)
}
}
private fun doesPacketContainJson(s: String): Boolean {
return Regex(jsonObject).containsMatchIn(s) ||
Regex(jsonArray).containsMatchIn(s) ||
Regex(jsonArrayAndObject).containsMatchIn(s)
}
}
JSONValidator测试类
class JSONValidatorTest {
private val packetValidator: StringValidator = JSONValidator()
// Other Test cases
@Test
fun `validate contains json`() {
val partialJson1 = "{"
val partialJson2 = "}"
val partialJson3 = "[{"
val partialJson4 = "]}"
val partialJson5 = "]"
//Issue: These test cases always failed
assert(packetValidator.isStringValid(partialJson1))
assert(packetValidator.isStringValid(partialJson2))
assert(packetValidator.isStringValid(partialJson3))
assert(packetValidator.isStringValid(partialJson4))
assert(packetValidator.isStringValid(partialJson5))
}
}
我在以下站点上对正则表达式进行了交叉验证,并且在该站点上工作正常。我希望我做对了。 :
我做了google,但是找不到有关我的用例的任何帮助。任何人都可以对这个问题有任何经验或想法吗?预先感谢。