JSON字符串和java对象的互转【json-lib】

1. 什么是 json-lib

json-lib 是一个老牌 Java JSON 处理库,可以方便地在 Java 对象和 JSON 字符串之间互转。

虽然现在更流行的库有 Jackson、Gson,但 json-lib 依然在一些遗留项目中使用。


2. 引入依赖

Maven 依赖

xml 复制代码
<dependency>
    <groupId>net.sf.json-lib</groupId>
    <artifactId>json-lib</artifactId>
    <version>2.4</version>
    <classifier>jdk15</classifier>
</dependency>
php
165 Bytes
© 菜鸟-创作你的创作

注意

json-lib 依赖以下库,需确保也引入:

  • commons-lang
  • commons-beanutils
  • commons-collections
  • commons-logging

3. 核心类

  • JSONObject --- 代表 JSON 对象
  • JSONArray --- 代表 JSON 数组
  • JsonConfig --- 配置序列化/反序列化行为

4. Java 对象转 JSON 字符串

示例代码

假设有个简单的 Java 类:

typescript 复制代码
public class User {
    private String name;
    private int age;
    // getter/setter
    public String getName() { return name; }
    public void setName(String name) { this.name = name; }
    public int getAge() { return age; }
    public void setAge(int age) { this.age = age; }
}
php
285 Bytes
© 菜鸟-创作你的创作

转换示例:

typescript 复制代码
import net.sf.json.JSONObject;
public class JsonLibDemo {
    public static void main(String[] args) {
        User user = new User();
        user.setName("小明");
        user.setAge(18);
        JSONObject json = JSONObject.fromObject(user);
        String jsonString = json.toString();
        System.out.println(jsonString);
    }
}
php
338 Bytes
© 菜鸟-创作你的创作

输出:

json 复制代码
{"age":18,"name":"小明"}
php
22 Bytes
© 菜鸟-创作你的创作

5. JSON 字符串转 Java 对象

typescript 复制代码
import net.sf.json.JSONObject;
public class JsonLibDemo {
    public static void main(String[] args) {
        String jsonString = "{"age":18,"name":"小明"}";
        JSONObject json = JSONObject.fromObject(jsonString);
        User user = (User) JSONObject.toBean(json, User.class);
        System.out.println(user.getName()); // 小明
        System.out.println(user.getAge());  // 18
    }
}
php
398 Bytes
© 菜鸟-创作你的创作

6. 处理集合类

Java 集合转 JSONArray

ini 复制代码
import net.sf.json.JSONArray;
import java.util.ArrayList;
import java.util.List;
List<User> userList = new ArrayList<>();
userList.add(user1);
userList.add(user2);
JSONArray jsonArray = JSONArray.fromObject(userList);
System.out.println(jsonArray.toString());
php
261 Bytes
© 菜鸟-创作你的创作

JSONArray 转 List

ini 复制代码
JSONArray jsonArray = JSONArray.fromObject(jsonString);
List<User> users = (List<User>) JSONArray.toCollection(jsonArray, User.class);
php
134 Bytes
© 菜鸟-创作你的创作

7. 注意事项

  • 日期处理
    默认日期格式会被序列化为时间戳,可以使用 JsonConfig 自定义日期格式。
  • 循环引用
    如果对象间存在循环引用,json-lib 可能会报错。
  • 性能
    json-lib 较老,性能和兼容性不如 Jackson 和 Gson。

8. 代码示例(含日期格式化)

typescript 复制代码
import net.sf.json.JSONObject;
import net.sf.json.JsonConfig;
import net.sf.json.util.CycleDetectionStrategy;
import java.text.SimpleDateFormat;
import java.util.Date;
public class JsonLibDateDemo {
    public static void main(String[] args) {
        JsonConfig jsonConfig = new JsonConfig();
        jsonConfig.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT);
        jsonConfig.registerJsonValueProcessor(Date.class, (value, jsonConfig1) -> {
            if (value == null) return "";
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            return sdf.format(value);
        });
        MyBean bean = new MyBean();
        bean.setDate(new Date());
        JSONObject json = JSONObject.fromObject(bean, jsonConfig);
        System.out.println(json.toString());
    }
}
class MyBean {
    private Date date;
    public Date getDate() { return date; }
    public void setDate(Date date) { this.date = date; }
}
php
962 Bytes
© 菜鸟-创作你的创作

www.52runoob.com/archives/55...

相关推荐
野犬寒鸦5 分钟前
力扣hot100:旋转图像(48)(详细图解以及核心思路剖析)
java·数据结构·后端·算法·leetcode
phiilo30 分钟前
golang 设置进程退出时kill所有子进程
后端
花花无缺31 分钟前
python自动化-pytest-用例发现规则和要求
后端·python
程序员小假33 分钟前
我们来说一说 Cglib 与 JDK 动态代理
后端
摆烂工程师2 小时前
教你如何认证 Gemini 教育优惠的二次验证,薅个 1年的 Gemini Pro 会员
后端·程序员·gemini
绝无仅有3 小时前
未来教育行业的 Go 服务开发解决方案与实践
后端·面试·github
程序员爱钓鱼3 小时前
Go语言实战案例- 命令行参数解析器
后端·google·go
心在飞扬3 小时前
Redis 介绍与 Node.js 使用教程
后端
milanyangbo4 小时前
“卧槽,系统又崩了!”——别慌,这也许是你看过最通俗易懂的分布式入门
分布式·后端·云原生·架构
AAA修煤气灶刘哥4 小时前
MySQL 查文本查哭了?来唠唠 ES 这货:从 “啥是 ES” 到 Java 撸代码,一篇整明白!
java·后端·elasticsearch