https://github.com/admin4j/admin4j-json
JSON 适配器工具类。适配各大框架 fastjson,fastjson2,jackson,gson等
https://github.com/admin4j/admin4j-json
fastjson fastjson2 gson jackson java json
Last synced: 6 months ago
JSON representation
JSON 适配器工具类。适配各大框架 fastjson,fastjson2,jackson,gson等
- Host: GitHub
- URL: https://github.com/admin4j/admin4j-json
- Owner: admin4j
- License: apache-2.0
- Created: 2023-05-05T07:01:26.000Z (over 2 years ago)
- Default Branch: master
- Last Pushed: 2024-05-14T06:37:39.000Z (over 1 year ago)
- Last Synced: 2024-05-15T14:15:55.912Z (over 1 year ago)
- Topics: fastjson, fastjson2, gson, jackson, java, json
- Language: Java
- Homepage:
- Size: 58.6 KB
- Stars: 12
- Watchers: 1
- Forks: 8
- Open Issues: 0
-
Metadata Files:
- Readme: readme.md
- License: LICENSE
Awesome Lists containing this project
README
# admin4j-json
admin4j-json 是一款高效实用的 JSON 解析和生成工具,提供简单易用的 API,可轻松完成 JSON 数据的读写操作。不仅如此,admin4j-json
还通过插件SPI的模式适配了多个主流框架,如 fastjson,fastjson2,jackson,gson 等,解决了 JSON 解析第三方框架多变/更换的问题,让您随时替换
json 解析框架,轻松应对各种开发需求。# usage
## maven 引入
### 使用 jackson
```xml
com.admin4j.json
admin4j-json-jackson
0.7.0```
最新版查询 [https://central.sonatype.com/artifact/com.admin4j.json/admin4j-json-jackson](https://central.sonatype.com/artifact/com.admin4j.json/admin4j-json-jackson)
### 使用 fastjson
```xml
com.admin4j.json
admin4j-json-fastjson
0.7.0```
### 使用 fastjson2
```xml
com.admin4j.json
admin4j-json-fastjson2
0.7.0```
### 使用 gson
```xml
com.admin4j.json
admin4j-json-gson
0.7.0```
### 具体使用
```java
public class JSONTest {@Test
public void testToJSONString() throws Exception {User admin4j = new User("admin4j", 18);
String jsonString = JSONUtil.toJSONString(admin4j);
System.out.println("jsonString = " + jsonString);
}@Test
public void testParseObject() throws Exception {String json = "{\"age\":18,\"name\":\"admin4j\"}";
User user = JSONUtil.parseObject(json, User.class);
System.out.println("user = " + user);
}@Test
public void testParseMap() throws Exception {String json = "{\"age\":18,\"name\":\"admin4j\"}";
Map stringObjectMap = JSONUtil.parseMap(json);
System.out.println("stringObjectMap = " + stringObjectMap);
}
}
```### 切换json解析框架
比如自己开发的框架,默认使用的 fastjson。但是使用者使用的是 fastjson2,不想再引入fastjson 依赖,怎么办?
参考 [https://github.com/admin4j/common-http](https://github.com/admin4j/common-http)#### 随时替换json解析框架
```
io.github.admin4j
http
0.7.0
com.admin4j.json
admin4j-json-fastjson
com.admin4j.json
admin4j-json-jackson
0.2.0```
# 添加自己的JSON解析框架
本项目使用JDK的SPI原理加载插件,使用者也可以使用SPI功能加入自己的JSON解析框架
參考 [FastjsonConvertor.java](https://github.com/admin4j/admin4j-json/blob/master/admin4j-json-fastjson/src/main/java/com/admin4j/json/FastjsonConvertor.java)## 第一步,引入依赖,实现JSONConvertor接口
```
com.alibaba
fastjson
com.admin4j.json
admin4j-json
0.2.0
``````java
public class FastjsonConvertor implements JSONConvertor {/**
* 解析/发序列化成对象
*
* @param is
* @param clazz
* @param charset
*/
@Override
public T parseObject(InputStream is, Charset charset, Class clazz) {try {
return JSON.parseObject(is, charset, clazz);
} catch (IOException e) {
throw new RuntimeException(e);
}
}/**
* 解析/发序列化成对象
*
* @param bytes
* @param clazz
* @param charset
*/
@Override
public T parseObject(byte[] bytes, Charset charset, Class clazz) {return JSON.parseObject(bytes, clazz);
}
/**
* 解析/发序列化成对象
*
* @param input
* @param clazz
*/
@Override
public T parseObject(String input, Class clazz) {
return JSON.parseObject(input, clazz);
}/**
* JSON 转 Map
*/
@Override
public Map parseMap(String input) {
return JSON.parseObject(input);
}@Override
public Map parseMap(InputStream is) {
try {
return JSON.parseObject(is, StandardCharsets.UTF_8, Map.class);
} catch (IOException e) {
throw new RuntimeException(e);
}
}@Override
public List parseList(String input, Class clazz) {
return JSON.parseArray(input, clazz);
}@Override
public List parseList(InputStream is, Class clazz) {String str = new BufferedReader(new InputStreamReader(is))
.lines().collect(Collectors.joining(System.lineSeparator()));
return JSON.parseArray(str, clazz);
}/**
* 序列化成json字符串
*
* @param object
*/
@Override
public String toJSONString(Object object) {
return JSON.toJSONString(object);
}@Override
public byte[] serialize(Object object) {
return JSON.toJSONBytes(object);}
}
```## 第二步,配置SPI

## 第三部,测试使用
end