您好,登录后才能下订单哦!
密码登录
登录注册
点击 登录注册 即表示同意《亿速云用户服务条款》
# JSON数据转换:net.sf.json库详解
## 一、JSON与Java对象转换概述
在现代Java开发中,JSON(JavaScript Object Notation)已成为数据交换的主流格式。`net.sf.json`是SourceForge上一个广泛使用的JSON处理库,提供了Java对象与JSON数据之间的双向转换能力。
### 主要功能特性
- 支持JavaBean、Map、Collection等对象转换
- 提供灵活的JSON字符串解析和生成
- 支持JSON与XML的相互转换
- 丰富的配置选项和自定义处理器
## 二、基础环境配置
### 1. 添加Maven依赖
```xml
<dependency>
<groupId>net.sf.json-lib</groupId>
<artifactId>json-lib</artifactId>
<version>2.4</version>
<classifier>jdk15</classifier>
</dependency>
JSONObject
:对应JSON对象结构JSONArray
:处理JSON数组结构JSONSerializer
:序列化工具类JSONUtils
:实用工具方法集合// Map转JSON
Map<String, Object> map = new HashMap<>();
map.put("name", "张三");
map.put("age", 25);
JSONObject json = JSONObject.fromObject(map);
// List转JSON
List<String> list = Arrays.asList("A","B","C");
JSONArray jsonArray = JSONArray.fromObject(list);
// JSON转Map
String jsonStr = "{\"city\":\"北京\",\"code\":\"010\"}";
JSONObject jsonObj = JSONObject.fromObject(jsonStr);
Map<String, Object> resultMap = (Map)JSONObject.toBean(jsonObj);
// JSON转List
String arrayStr = "[\"Java\",\"Python\",\"C++\"]";
JSONArray jsonArr = JSONArray.fromObject(arrayStr);
List<String> languages = (List)JSONArray.toCollection(jsonArr);
public class User {
private String username;
private String email;
// getters/setters...
}
// Bean转JSON
User user = new User("admin", "admin@example.com");
JSONObject userJson = JSONObject.fromObject(user);
// JSON转Bean
String userJsonStr = "{\"username\":\"guest\",\"email\":\"guest@test.com\"}";
User newUser = (User)JSONObject.toBean(
JSONObject.fromObject(userJsonStr), User.class);
JsonConfig config = new JsonConfig();
config.registerJsonValueProcessor(Date.class, new JsonValueProcessor() {
@Override
public Object processObjectValue(String key, Object value, JsonConfig cfg) {
return new SimpleDateFormat("yyyy-MM-dd").format((Date)value);
}
// 实现数组处理方法...
});
JSONObject json = JSONObject.fromObject(objWithDate, config);
JsonConfig config = new JsonConfig();
config.registerJsonValueProcessor(Date.class,
new DateJsonValueProcessor("yyyy/MM/dd HH:mm"));
String jsonStr = JSONSerializer.toJSON(obj, config).toString();
JsonConfig config = new JsonConfig();
config.setExcludes(new String[]{"password", "salt"});
JSONObject safeJson = JSONObject.fromObject(user, config);
JsonConfig config = new JsonConfig();
config.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT);
JsonConfig
实例减少开销JSONObject/JSONArray
config.setJsonPropertyFilter(new PropertyFilter() {
public boolean apply(Object source, String name, Object value) {
return value != null;
}
});
特性 | net.sf.json | Gson | Jackson |
---|---|---|---|
转换速度 | 中等 | 快 | 最快 |
内存占用 | 较高 | 低 | 最低 |
功能完整性 | 完善 | 较完善 | 最完善 |
配置灵活性 | 高 | 中等 | 高 |
JSONObject.escape(jsonStr); // 转义特殊字符
JsonConfig config = new JsonConfig();
config.registerJsonValueProcessor(BigDecimal.class,
new NumberJsonValueProcessor("#.##"));
建议使用2.4及以上版本,注意JDK版本对应的classifier: - jdk15:JDK 1.5+ - jdk13:JDK 1.3⁄1.4
net.sf.json作为老牌JSON处理库,虽然性能不及新一代的Jackson等框架,但其丰富的功能和灵活的配置仍然在遗留系统中广泛使用。对于新项目,建议评估性能需求后选择更现代的解决方案,但对于需要维护旧代码的场景,深入掌握net.sf.json的使用仍然十分必要。
提示:在Spring Boot等现代框架中,可以考虑逐步迁移到Jackson或Gson实现,以获得更好的性能和社区支持。 “`
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。