{"id":21719727,"url":"https://github.com/troyzhxu/xjsonkit","last_synced_at":"2025-04-12T20:51:30.772Z","repository":{"id":50676520,"uuid":"330304943","full_name":"troyzhxu/xjsonkit","owner":"troyzhxu","description":"超轻量级 JSON / JSONB / XML / YAML 解析门面 API，用法简单，使业务代码不依赖具体实现，解耦神器！","archived":false,"fork":false,"pushed_at":"2024-08-30T09:52:23.000Z","size":165,"stargazers_count":29,"open_issues_count":1,"forks_count":6,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-26T15:04:21.739Z","etag":null,"topics":["java","json","jsonb","xml","yaml"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/troyzhxu.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-01-17T03:16:06.000Z","updated_at":"2024-09-23T14:31:26.000Z","dependencies_parsed_at":"2024-11-26T02:00:54.013Z","dependency_job_id":null,"html_url":"https://github.com/troyzhxu/xjsonkit","commit_stats":null,"previous_names":[],"tags_count":14,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/troyzhxu%2Fxjsonkit","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/troyzhxu%2Fxjsonkit/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/troyzhxu%2Fxjsonkit/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/troyzhxu%2Fxjsonkit/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/troyzhxu","download_url":"https://codeload.github.com/troyzhxu/xjsonkit/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248631727,"owners_count":21136560,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["java","json","jsonb","xml","yaml"],"created_at":"2024-11-26T01:41:53.996Z","updated_at":"2025-04-12T20:51:30.740Z","avatar_url":"https://github.com/troyzhxu.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# xJsonKit\n\n\u003cp\u003e\n    \u003ca href=\"https://maven-badges.herokuapp.com/maven-central/cn.zhxu/xjsonkit/\"\u003e\u003cimg src=\"https://maven-badges.herokuapp.com/maven-central/cn.zhxu/xjsonkit/badge.svg\" alt=\"Maven Central\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://gitee.com/troyzhxu/xjsonkit/blob/master/LICENSE\"\u003e\u003cimg src=\"https://img.shields.io/hexpm/l/plug.svg\" alt=\"License\"\u003e\u003c/a\u003e\n    \u003ca href=\"https://github.com/troyzhxu\"\u003e\u003cimg src=\"https://img.shields.io/badge/%E4%BD%9C%E8%80%85-troyzhxu-orange.svg\" alt=\"Troy.Zhou\"\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n## 介绍\n\n超轻量级 **JSON** / **JSONB** / **XML** / **YAML** 的 **正序列化** 与 **反序列化** 的 **门面框架**，让业务代码不依赖具体的实现，与 Jackson、Gson、Fastjson 等 **解耦**，让你可以在需要的时候轻松切换项目底层实现！\n\n## 安装教程\n\n#### API 依赖\n\n```groovy\nimplementation 'cn.zhxu:xjsonkit-api:1.5.0'\n```\n\n该依赖提供了 `JsonKit`、`JsonbKit`、`XmlKit`、`YamlKit` 四个工具类，它们分别提供了对 JSON / JSONB / XML / YAML 类型数据的正反序列化操作相关的 API。\n\n#### JSON 相关实现\n\n```groovy\n// Fastjson 实现\nimplementation 'cn.zhxu:xjsonkit-fastjson:1.5.0'\n// Fastjson2 实现\nimplementation 'cn.zhxu:xjsonkit-fastjson2:1.5.0'\n// Gson 实现\nimplementation 'cn.zhxu:xjsonkit-gson:1.5.0'\n// Jackson 实现\nimplementation 'cn.zhxu:xjsonkit-jackson:1.5.0'\n// Snack3 实现\nimplementation 'cn.zhxu:xjsonkit-snack3:1.5.0'\n```\n\n#### JSONB 相关实现\n\n```groovy\n// Fastjson2-JSONB 实现\nimplementation 'cn.zhxu:xjsonkit-fastjson2-jsonb:1.5.0'\n```\n\n#### XML 相关实现\n\n```groovy\n// Jackson Xml\nimplementation 'cn.zhxu:xjsonkit-jackson-xml:1.5.0'\n```\n\n#### YAML 相关实现\n\n```groovy\n// Jackson Yaml\nimplementation 'cn.zhxu:xjsonkit-jackson-yaml:1.5.0'\n```\n\n## 使用说明\n\nxJsonKit 共提供了 `JsonKit`、`JsonbKit`、`XmlKit`、`YamlKit` 四个工具类。下文以 `JsonKit` 为例简述其用法，其它工具类使用方法类似。\n\n### 反序列化 toMapper\n\n```java\nString json = \"{\\\"name\\\":\\\"Jack\\\",\\\"age\\\":20}\";\n// 转换为具有映射结构的 Mapper 对象\nMapper mapper = JsonKit.toMapper(json);\n\n// 第一层的键集合大小\nint size = mapper.size();               // 2\n// 第一层的键值集合\nSet\u003cString\u003e keys = mapper.keySet();     // [\"name\", \"age\"]\n// 按键名访问 String 属性\nString name = mapper.getString(\"name\"); // Jack\n// 按键名访问 int 属性\nint age = mapper.getInt(\"age\");         // 20\n    \n// 遍历 Mapper 对象\nmapper.forEach((key, data) -\u003e {\n    System.out.println(key);            // 依次输出 name 和 age\n    System.out.println(data);           // 依次输出 Jack 和 20\n});\n\nSystem.out.println(mapper);             // 输出 {\"name\":\"Jack\",\"age\":20}\nSystem.out.println(mapper.toPretty());  // 格式化输出\n```\n\n### 反序列化 toArray\n\n```java\nString json = \"[20,{\\\"name\\\":\\\"Jack\\\"},\\\"JsonKit\\\"]\";\n// 转换为具有数组结构的 Array 对象\nArray array = JsonKit.toArray(json);\n\n// 数组大小\nint size = array.size();                // 3\n// 按下标获取 int 数据\nint value = array.getInt(0);            // 20\n// 按下标获取 Mapper 数据\nMapper mapper = array.getMapper(1);     // {\"name\":\"Jack\"}\n// 按下标获取 String 数据\nString string = array.getString(2);     // JsonKit\n\n// 遍历 Array 对象\narray.forEach(((index, data) -\u003e {\n    System.out.println(index);          // 依次输出 0、 1 和 2\n    System.out.println(data);           // 依次输出 20、 {\"name\":\"Jack\"} 和 JsonKit\n}));\n\nSystem.out.println(array);              // 输出 [20,{\"name\":\"Jack\"},\"JsonKit\"]\nSystem.out.println(array.toPretty());   // 格式化输出\n```\n\n### 反序列化 toBean\n\n```java\nString json = \"{\\\"name\\\":\\\"Jack\\\",\\\"age\\\":20}\";\n// 根据类型 转换为 Java Bean\nUser user = JsonKit.toBean(User.class, json);\n\nString name = user.getName();           // Jack\nint name = user.getAge();               // 20\n```\n\n### 反序列化 toList\n\n```java\nString json = \"[{\\\"name\\\":\\\"Jack\\\",\\\"age\\\":20}, {\\\"name\\\":\\\"Tom\\\",\\\"age\\\":21}]\";\n// 根据类型 转换为 Java List\nList\u003cUser\u003e list = JsonKit.toList(User.class, json);\n\nint size = list.size();                 // 2\nUser user1 = list.get(0);               // {\"name\":\"Jack\",\"age\":20}\nUser user2 = list.get(1);               // {\"name\":\"Tom\",\"age\":21}\n```\n\n### 正序列化 toJson\n\n```java\nUser user = new User();\nuser.setName(\"Jack\");\nuser.setAge(20);\n\nString json = JsonKit.toJson(user);     // 转换为 JSON 字符串\nSystem.out.println(json);               // 输出 {\"age\":20,\"name\":\"Jack\"}\n\nString pretty = JsonKit.toPretty(user); // 转换为 格式化的 JSON 字符串\nString pretty = JsonKit.toJson(user, true);\n```\n\n### 格式互转\n\n* JSON 对象 转 XML、YAML、JSONB\n\n```java\nvar json = \"{\\\"id\\\":1,\\\"name\\\":\\\"Jack\\\",\\\"age\\\":20}\";\n// 转 XML\nvar xml = XmlKit.toXml(JsonKit.toMapper(json));\n// 转 YAML\nvar yaml = XmlKit.toYaml(JsonKit.toMapper(json));\n// 转 JSONB\nvar jsonb = JsonbKit.toBytes(JsonKit.toMapper(json));\n```\n\n* JSON 数组 转 XML、YAML、JSONB\n\n```java\nvar json = \"[{\\\"id\\\":1,\\\"name\\\":\\\"Jack\\\"},{\\\"id\\\":2,\\\"name\\\":\\\"Tom\\\"}]\";\n// 转 XML\nvar xml = XmlKit.toXml(JsonKit.toArray(json));\n// 转 YAML\nvar yaml = XmlKit.toYaml(JsonKit.toArray(json));\n// 转 JSONB\nvar jsonb = JsonbKit.toBytes(JsonKit.toArray(json));\n```\n\n* XML 对象 转 JSON、YAML、JSONB\n\n```java\nvar xml = \"\u003croot\u003e\u003cid\u003e1\u003c/id\u003e\u003cname\u003eJack\u003c/name\u003e\u003cage\u003e20\u003c/age\u003e\u003c/root\u003e\";\n// 转 JSON\nvar json = JsonKit.toJson(XmlKit.toMapper(xml));\n// 转 YAML\nvar yaml = XmlKit.toYaml(XmlKit.toMapper(xml));\n// 转 JSONB\nvar jsonb = JsonbKit.toBytes(XmlKit.toMapper(xml));\n```\n\n* XML 数组 转 JSON、YAML、JSONB\n\n```java\nvar xml = \"\u003clist\u003e\u003citem\u003e\u003cid\u003e1\u003c/id\u003e\u003cname\u003eJack\u003c/name\u003e\u003c/item\u003e\u003citem\u003e\u003cid\u003e2\u003c/id\u003e\u003cname\u003eTom\u003c/name\u003e\u003c/item\u003e\u003c/list\u003e\";\n// 转 JSON\nvar json = JsonKit.toJson(XmlKit.toArray(xml));\n// 转 YAML\nvar yaml = XmlKit.toYaml(XmlKit.toArray(xml));\n// 转 JSONB\nvar jsonb = JsonbKit.toBytes(XmlKit.toArray(xml));\n```\n\n* 等等（YAML 与 JSONB 转其它格式同理）\n\n## 配置方法\n\n如果已经添加了如 `xjsonkit-jackson` 的底层实现包，则不用任何配置即可正常使用。\n\n但如果需要特殊配置，例如使用 Jackson 时，可进行如下配置：\n\n```java\nObjectMapper objectMapper = new ObjectMapper();\n// TODO: 对 ObjectMapper 进行配置...\n\n// 对 JsonKit 进行配置\nConfig.json(new JacksonDataConvertor(ObjectMapper));\n```\n\n其中 `Config` 是 `cn.zhxu.xjson.spi` 包下的配置类，它里面有 `json(..)`、`jsonb(..)`、`xml(..)`、`yaml(..)` 四个配置方法，它们分别作用于 `JsonKit`、`JsonbKit`、`XmlKit`、`YamlKit` 四个工具类。\n\n### 自定义底层实现\n\n只需实现 `DataConvertor` 接口即可：\n\n```java\n// 自定义 JSON 实现\nConfig.json(new MyJsonDataConvertor());\n// 自定义 JSONB 实现\nConfig.jsonb(new MyJsonbDataConvertor());\n// 自定义 XML 实现\nConfig.xml(new MyXmlDataConvertor());\n// 自定义 YAML 实现\nConfig.yaml(new MyYamlDataConvertor());\n```\n\n## 友情链接\n\n[**[ OkHttps ]** 轻量却强大的 HTTP 客户端，前后端通用，支持 WebSocket 与 Stomp 协议](https://gitee.com/troyzhxu/okhttps)\n\n[**[ Bean Searcher ]** 轻量级数据库条件检索引擎，一行代码实现复杂条件列表检索！](https://gitee.com/troyzhxu/bean-searcher)\n\n## 参与贡献\n\n1. Star Fork 本仓库\n2. 新建 Feat_xxx 分支\n3. 提交代码\n4. 新建 Pull Request\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftroyzhxu%2Fxjsonkit","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftroyzhxu%2Fxjsonkit","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftroyzhxu%2Fxjsonkit/lists"}