{"id":21915734,"url":"https://github.com/admin4j/admin4j-json","last_synced_at":"2025-04-18T21:52:03.886Z","repository":{"id":162017552,"uuid":"636577286","full_name":"admin4j/admin4j-json","owner":"admin4j","description":"JSON 适配器工具类。适配各大框架 fastjson，fastjson2，jackson，gson等","archived":false,"fork":false,"pushed_at":"2024-05-14T06:37:39.000Z","size":60,"stargazers_count":12,"open_issues_count":0,"forks_count":8,"subscribers_count":1,"default_branch":"master","last_synced_at":"2024-05-15T14:15:55.912Z","etag":null,"topics":["fastjson","fastjson2","gson","jackson","java","json"],"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/admin4j.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":"2023-05-05T07:01:26.000Z","updated_at":"2024-05-14T06:37:42.000Z","dependencies_parsed_at":"2024-05-14T07:43:39.322Z","dependency_job_id":"3b896747-0e8c-4291-acc0-676bb7e4b7c3","html_url":"https://github.com/admin4j/admin4j-json","commit_stats":null,"previous_names":[],"tags_count":8,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/admin4j%2Fadmin4j-json","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/admin4j%2Fadmin4j-json/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/admin4j%2Fadmin4j-json/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/admin4j%2Fadmin4j-json/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/admin4j","download_url":"https://codeload.github.com/admin4j/admin4j-json/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":226971309,"owners_count":17711413,"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":["fastjson","fastjson2","gson","jackson","java","json"],"created_at":"2024-11-28T19:13:57.112Z","updated_at":"2024-11-28T19:13:57.608Z","avatar_url":"https://github.com/admin4j.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# admin4j-json\n\nadmin4j-json 是一款高效实用的 JSON 解析和生成工具，提供简单易用的 API，可轻松完成 JSON 数据的读写操作。不仅如此，admin4j-json\n还通过插件SPI的模式适配了多个主流框架，如 fastjson，fastjson2，jackson，gson 等，解决了 JSON 解析第三方框架多变/更换的问题，让您随时替换\njson 解析框架，轻松应对各种开发需求。\n\n# usage\n\n## maven 引入\n\n### 使用 jackson\n\n```xml\n\n\u003cdependency\u003e\n    \u003cgroupId\u003ecom.admin4j.json\u003c/groupId\u003e\n    \u003cartifactId\u003eadmin4j-json-jackson\u003c/artifactId\u003e\n    \u003cversion\u003e0.7.0\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\n最新版查询 [https://central.sonatype.com/artifact/com.admin4j.json/admin4j-json-jackson](https://central.sonatype.com/artifact/com.admin4j.json/admin4j-json-jackson)\n\n### 使用 fastjson\n\n```xml\n\n\u003cdependency\u003e\n    \u003cgroupId\u003ecom.admin4j.json\u003c/groupId\u003e\n    \u003cartifactId\u003eadmin4j-json-fastjson\u003c/artifactId\u003e\n    \u003cversion\u003e0.7.0\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\n### 使用 fastjson2\n\n```xml\n\n\u003cdependency\u003e\n    \u003cgroupId\u003ecom.admin4j.json\u003c/groupId\u003e\n    \u003cartifactId\u003eadmin4j-json-fastjson2\u003c/artifactId\u003e\n    \u003cversion\u003e0.7.0\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\n### 使用 gson\n\n```xml\n\n\u003cdependency\u003e\n    \u003cgroupId\u003ecom.admin4j.json\u003c/groupId\u003e\n    \u003cartifactId\u003eadmin4j-json-gson\u003c/artifactId\u003e\n    \u003cversion\u003e0.7.0\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\n### 具体使用\n\n```java\npublic class JSONTest {\n\n    @Test\n    public void testToJSONString() throws Exception {\n\n        User admin4j = new User(\"admin4j\", 18);\n        String jsonString = JSONUtil.toJSONString(admin4j);\n        System.out.println(\"jsonString = \" + jsonString);\n    }\n\n    @Test\n    public void testParseObject() throws Exception {\n\n        String json = \"{\\\"age\\\":18,\\\"name\\\":\\\"admin4j\\\"}\";\n        User user = JSONUtil.parseObject(json, User.class);\n        System.out.println(\"user = \" + user);\n    }\n\n    @Test\n    public void testParseMap() throws Exception {\n\n        String json = \"{\\\"age\\\":18,\\\"name\\\":\\\"admin4j\\\"}\";\n        Map\u003cString, Object\u003e stringObjectMap = JSONUtil.parseMap(json);\n        System.out.println(\"stringObjectMap = \" + stringObjectMap);\n    }\n}\n```\n\n### 切换json解析框架\n\n比如自己开发的框架，默认使用的 fastjson。但是使用者使用的是 fastjson2，不想再引入fastjson 依赖，怎么办？\n参考 [https://github.com/admin4j/common-http](https://github.com/admin4j/common-http)\n\n#### 随时替换json解析框架\n\n``` \n\u003cdependency\u003e\n    \u003cgroupId\u003eio.github.admin4j\u003c/groupId\u003e\n    \u003cartifactId\u003ehttp\u003c/artifactId\u003e\n    \u003cversion\u003e0.7.0\u003c/version\u003e\n    \u003cexclusions\u003e\n        \u003cexclusion\u003e\n            \u003cgroupId\u003ecom.admin4j.json\u003c/groupId\u003e\n            \u003cartifactId\u003eadmin4j-json-fastjson\u003c/artifactId\u003e\n        \u003c/exclusion\u003e\n    \u003c/exclusions\u003e\n\u003c/dependency\u003e\n\n\u003cdependency\u003e\n    \u003cgroupId\u003ecom.admin4j.json\u003c/groupId\u003e\n    \u003cartifactId\u003eadmin4j-json-jackson\u003c/artifactId\u003e\n    \u003cversion\u003e0.2.0\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\n# 添加自己的JSON解析框架\n\n本项目使用JDK的SPI原理加载插件，使用者也可以使用SPI功能加入自己的JSON解析框架\n參考 [FastjsonConvertor.java](https://github.com/admin4j/admin4j-json/blob/master/admin4j-json-fastjson/src/main/java/com/admin4j/json/FastjsonConvertor.java)\n\n## 第一步，引入依赖，实现JSONConvertor接口\n\n```\n \u003cdependencies\u003e\n        \u003cdependency\u003e\n            \u003cgroupId\u003ecom.alibaba\u003c/groupId\u003e\n            \u003cartifactId\u003efastjson\u003c/artifactId\u003e\n        \u003c/dependency\u003e\n        \u003cdependency\u003e\n            \u003cgroupId\u003ecom.admin4j.json\u003c/groupId\u003e\n            \u003cartifactId\u003eadmin4j-json\u003c/artifactId\u003e\n            \u003cversion\u003e0.2.0\u003c/version\u003e\n        \u003c/dependency\u003e\n  \u003c/dependencies\u003e\n```\n\n```java\npublic class FastjsonConvertor implements JSONConvertor {\n\n    /**\n     * 解析/发序列化成对象\n     *\n     * @param is\n     * @param clazz\n     * @param charset\n     */\n    @Override\n    public \u003cT\u003e T parseObject(InputStream is, Charset charset, Class\u003cT\u003e clazz) {\n\n        try {\n            return JSON.parseObject(is, charset, clazz);\n        } catch (IOException e) {\n            throw new RuntimeException(e);\n        }\n    }\n\n    /**\n     * 解析/发序列化成对象\n     *\n     * @param bytes\n     * @param clazz\n     * @param charset\n     */\n    @Override\n    public \u003cT\u003e T parseObject(byte[] bytes, Charset charset, Class\u003cT\u003e clazz) {\n\n        return JSON.parseObject(bytes, clazz);\n\n    }\n\n    /**\n     * 解析/发序列化成对象\n     *\n     * @param input\n     * @param clazz\n     */\n    @Override\n    public \u003cT\u003e T parseObject(String input, Class\u003cT\u003e clazz) {\n        return JSON.parseObject(input, clazz);\n    }\n\n\n    /**\n     * JSON 转 Map\n     */\n    @Override\n    public Map\u003cString, Object\u003e parseMap(String input) {\n        return JSON.parseObject(input);\n    }\n\n    @Override\n    public Map\u003cString, Object\u003e parseMap(InputStream is) {\n        try {\n            return JSON.parseObject(is, StandardCharsets.UTF_8, Map.class);\n        } catch (IOException e) {\n            throw new RuntimeException(e);\n        }\n    }\n\n    @Override\n    public \u003cT\u003e List\u003cT\u003e parseList(String input, Class\u003cT\u003e clazz) {\n        return JSON.parseArray(input, clazz);\n    }\n\n    @Override\n    public \u003cT\u003e List\u003cT\u003e parseList(InputStream is, Class\u003cT\u003e clazz) {\n\n        String str = new BufferedReader(new InputStreamReader(is))\n                .lines().collect(Collectors.joining(System.lineSeparator()));\n        return JSON.parseArray(str, clazz);\n    }\n\n    /**\n     * 序列化成json字符串\n     *\n     * @param object\n     */\n    @Override\n    public String toJSONString(Object object) {\n        return JSON.toJSONString(object);\n    }\n\n    @Override\n    public byte[] serialize(Object object) {\n        return JSON.toJSONBytes(object);\n\n    }\n}\n```\n\n## 第二步，配置SPI\n\n![在这里插入图片描述](https://img-blog.csdnimg.cn/d131f63b1fc14e6fbfe0e938dcf33dd3.png)\n\n## 第三部，测试使用\n\nend","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fadmin4j%2Fadmin4j-json","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fadmin4j%2Fadmin4j-json","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fadmin4j%2Fadmin4j-json/lists"}