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...

相关推荐
zopple5 小时前
常见的 Spring 项目目录结构
java·后端·spring
cjy0001117 小时前
springboot的 nacos 配置获取不到导致启动失败及日志不输出问题
java·spring boot·后端
小江的记录本8 小时前
【事务】Spring Framework核心——事务管理:ACID特性、隔离级别、传播行为、@Transactional底层原理、失效场景
java·数据库·分布式·后端·sql·spring·面试
sheji34168 小时前
【开题答辩全过程】以 基于springboot的校园失物招领系统为例,包含答辩的问题和答案
java·spring boot·后端
程序员cxuan8 小时前
人麻了,谁把我 ssh 干没了
人工智能·后端·程序员
wuyikeer10 小时前
Spring Framework 中文官方文档
java·后端·spring
Victor35610 小时前
MongoDB(61)如何避免大文档带来的性能问题?
后端
Victor35610 小时前
MongoDB(62)如何避免锁定问题?
后端
wuyikeer11 小时前
Spring BOOT 启动参数
java·spring boot·后端
子木HAPPY阳VIP11 小时前
Ubuntu 22.04 VMware 设置固定IP配置
人工智能·后端·目标检测·机器学习·目标跟踪