Jsoner
Jsoner 是Cloudopt Next 的 Json 工具类,几乎所有与 Json 有关的操作都是使用这个工具类的,默认使用 Jackson。参数中没有指定反序列化的情况下将会返回底层 json 工具的对象,建议在使用 Cloudopt Next 期间所有 Json 有关的操作都使用这个帮助类。为了方便大家使用,我们还提供了创建默认的 json 对象的 DSL。
具体使用方式可以参考下面的测试用例:
class TestCase {
private val testJsonArrayString = "[{\"name\":\"Andy\",\"sex\":1},{\"name\":\"GitHub\",\"sex\":2}]"
private val testJsonString = "{\"name\":\"Andy\",\"sex\":1}"
@Test
fun toJsonMap() {
assertTrue {
testJsonString.jsonToMutableMap()["name"]?.equals("Andy") ?: false
}
}
@Test
fun toJsonMapList() {
assertTrue {
testJsonArrayString.jsonToMutableMapList()[0]["name"]?.equals("Andy") ?: false
}
}
@Test
fun toJsonString() {
assertTrue { Student("Andy", 1).toJsonString() == testJsonString }
}
@Test
fun toJsonObject() {
assertTrue {
testJsonString.toJsonObject().getString("name") == "Andy"
}
}
@Test
fun toJsonArray() {
assertTrue {
testJsonArrayString.toJsonArray().getJsonObject(0).getString("name") == "Andy"
}
}
@Test
fun toObject() {
val student: Student = testJsonString.jsonToObject(Student::class)
assertTrue {
student.name == "Andy"
}
}
@Test
fun toObjectList() {
val student: List<Student> = testJsonArrayString.jsonToObjectList(Student::class)
assertTrue {
student[0].name == "Andy"
}
}
@Test
fun toList() {
assertTrue {
(testJsonArrayString.jsonToObjectList()[0] as JsonObject).getString("name") == "Andy"
}
}
@Test
fun creatJsonByDSL() {
val a = json(
"a" to "1",
"b" to json(
"c" to "2"
),
"c" to jsonArray(
json(
"d" to "3"
)
),
"student" to Student(name = "next", sex = 1)
)
assert(
a.toJsonString().isNotBlank()
)
}
}
自定义Jsoner
Jsoner 是单例模式的,在初始化时会自动读取配置文件中的 jsonProvider 中的类名,如 net.cloudopt.next.json.DefaultJSONProvider 来进行初始化,如果您需要替换自己喜欢的 Json 支持库(如 gson)可以创建一个新的 JSONProvider 并修改配置文件。
创建一个新的 Provider 非常简单,只需要实现 JsonProvider 类即可。您也可以参考默认的 DefaultJSONProvider。