Jsoner

Jsoner 是Cloudopt Next 的 Json 工具类,几乎所有与 Json 有关的操作都是使用这个工具类的,默认使用 Jackson。参数中没有指定反序列化的情况下将会返回底层 json 工具的对象,建议在使用 Cloudopt Next 期间所有 Json 有关的操作都使用这个帮助类。为了方便大家使用,我们还提供了创建默认的 json 对象的 DSL。

具体使用方式可以参考下面的测试用例:

  1. class TestCase {
  2. private val testJsonArrayString = "[{\"name\":\"Andy\",\"sex\":1},{\"name\":\"GitHub\",\"sex\":2}]"
  3. private val testJsonString = "{\"name\":\"Andy\",\"sex\":1}"
  4. @Test
  5. fun toJsonMap() {
  6. assertTrue {
  7. testJsonString.jsonToMutableMap()["name"]?.equals("Andy") ?: false
  8. }
  9. }
  10. @Test
  11. fun toJsonMapList() {
  12. assertTrue {
  13. testJsonArrayString.jsonToMutableMapList()[0]["name"]?.equals("Andy") ?: false
  14. }
  15. }
  16. @Test
  17. fun toJsonString() {
  18. assertTrue { Student("Andy", 1).toJsonString() == testJsonString }
  19. }
  20. @Test
  21. fun toJsonObject() {
  22. assertTrue {
  23. testJsonString.toJsonObject().getString("name") == "Andy"
  24. }
  25. }
  26. @Test
  27. fun toJsonArray() {
  28. assertTrue {
  29. testJsonArrayString.toJsonArray().getJsonObject(0).getString("name") == "Andy"
  30. }
  31. }
  32. @Test
  33. fun toObject() {
  34. val student: Student = testJsonString.jsonToObject(Student::class)
  35. assertTrue {
  36. student.name == "Andy"
  37. }
  38. }
  39. @Test
  40. fun toObjectList() {
  41. val student: List<Student> = testJsonArrayString.jsonToObjectList(Student::class)
  42. assertTrue {
  43. student[0].name == "Andy"
  44. }
  45. }
  46. @Test
  47. fun toList() {
  48. assertTrue {
  49. (testJsonArrayString.jsonToObjectList()[0] as JsonObject).getString("name") == "Andy"
  50. }
  51. }
  52. @Test
  53. fun creatJsonByDSL() {
  54. val a = json(
  55. "a" to "1",
  56. "b" to json(
  57. "c" to "2"
  58. ),
  59. "c" to jsonArray(
  60. json(
  61. "d" to "3"
  62. )
  63. ),
  64. "student" to Student(name = "next", sex = 1)
  65. )
  66. assert(
  67. a.toJsonString().isNotBlank()
  68. )
  69. }
  70. }

自定义Jsoner

Jsoner 是单例模式的,在初始化时会自动读取配置文件中的 jsonProvider 中的类名,如 net.cloudopt.next.json.DefaultJSONProvider 来进行初始化,如果您需要替换自己喜欢的 Json 支持库(如 gson)可以创建一个新的 JSONProvider 并修改配置文件。

创建一个新的 Provider 非常简单,只需要实现 JsonProvider 类即可。您也可以参考默认的 DefaultJSONProvider