用 alibaba 的 fastjson 将 list 或 map 转为 json 字符串

本文介绍如何使用Alibaba的FastJSON库将Java中的List和Map类型数据转换为JSON字符串,同时也展示了如何将JSON字符串解析回Java对象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

用 alibaba 的 fastjson 将 list 或 map 转为 json 字符串。不用 net.sf.json.JSONObject 或者 net.sf.json.JSONArray。

写法:
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.31</version>
</dependency>


import com.alibaba.fastjson.JSONObject;

// List 转 json string

String jsonStr = JSONObject.toJSONString( list );

 

// Map 转 json string

String jsonStr = JSONObject.toJSONString( map );

 

// 将 json string 转化为 JSONObject

JSONObject obj = JSONObject.parseObject( jsonStr );

 

 

<think>我们使用Fastjson库将Java对象换为JSON字符串Fastjson是阿里巴巴的开源JSON解析库,可以高效地将Java对象换成JSON字符串,同时也支持将JSON字符串换回Java对象。 根据引用[2]和引用[5]的内容,我们可以使用Fastjson的`JSON.toJSONString()`方法将Java对象换为JSON字符串。 ### 步骤: 1. **添加Fastjson依赖**:首先需要在项目中添加Fastjson的依赖。 2. **使用`JSON.toJSONString()`方法**:将Java对象作为参数传入该方法即可。 ### 示例代码: #### 1. 添加Maven依赖: ```xml <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.83</version> <!-- 请使用最新版本 --> </dependency> ``` #### 2. 创建实体类: ```java public class User { private String name; private int age; // 必须有无参构造器(如果定义了有参构造器,则需要显式写出无参构造器) public User() { } public User(String name, int age) { this.name = name; this.age = 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; } } ``` #### 3. 使用Fastjson将Java对象换为JSON字符串: ```java import com.alibaba.fastjson.JSON; public class Main { public static void main(String[] args) { // 创建Java对象 User user = new User("张三", 25); // 使用Fastjson将Java对象换为JSON字符串 String jsonString = JSON.toJSONString(user); // 输出结果 System.out.println(jsonString); // 输出: {"age":25,"name":"张三"} } } ``` ### 注意事项: - **实体类要求**:实体类必须有无参构造器(可以是默认的),并且属性要有对应的getter和setter方法,否则Fastjson可能无法正确序列化。 - **字段控制**:如果希望某些字段不参与序列化,可以使用`@JSONField(serialize=false)`注解。 - **日期格式化**:Fastjson默认将日期换为毫秒数,可以通过注解`@JSONField(format="yyyy-MM-dd HH:mm:ss")`来指定日期格式。 ### 示例:使用注解控制字段 ```java import com.alibaba.fastjson.annotation.JSONField; public class User { private String name; private int age; @JSONField(format="yyyy-MM-dd") private Date birthDate; // 日期字段 // 忽略该字段 @JSONField(serialize=false) private String secret; // ... 构造器、getter、setter } ``` ### 性能说明: Fastjson在序列化速度上通常表现优异,适合对性能要求较高的场景[^2][^5]。 ### 相关问题: 1. 如何将JSON字符串换回Java对象? 2.Fastjson中如何处理复杂的嵌套对象? 3. Fastjson与其他JSON库(如Jackson、Gson)相比有何优缺点?</think>### 使用 Fastjson 将 Java 对象换为 JSON 字符串 根据引用内容[^2][^4][^5],使用 Fastjson 进行 Java 对象到 JSON 字符串换非常简便。以下是详细步骤和示例: #### 1. 添加 Maven 依赖 ```xml <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.83</version> <!-- 请使用最新版本 --> </dependency> ``` #### 2. 基础换方法 ```java import com.alibaba.fastjson.JSON; // 创建实体对象 User user = new User("张三", 25); // 换为 JSON 字符串 String jsonString = JSON.toJSONString(user); System.out.println(jsonString); // 输出: {"name":"张三","age":25} ``` #### 3. 处理复杂对象 ```java // 包含嵌套对象的实体 class Order { private String orderId; private User user; // getter/setter } Order order = new Order("ORDER-001", user); // 换嵌套对象 String complexJson = JSON.toJSONString(order); System.out.println(complexJson); // 输出: {"orderId":"ORDER-001","user":{"name":"张三","age":25}} ``` #### 4. 自定义序列化配置 ```java // 排除空值字段 String json = JSON.toJSONString(user, SerializerFeature.WriteMapNullValue, SerializerFeature.WriteNullStringAsEmpty ); // 美化输出格式 String prettyJson = JSON.toJSONString(user, SerializerFeature.PrettyFormat ); ``` #### 5. 高级特性示例 ```java // 换集合对象 List<User> users = Arrays.asList( new User("李四", 30), new User("王五", 28) ); String jsonArray = JSON.toJSONString(users); System.out.println(jsonArray); // 输出: [{"name":"李四","age":30},{"name":"王五","age":28}] // Map 对象 Map<String, Object> dataMap = new HashMap<>(); dataMap.put("users", users); dataMap.put("total", 2); String mapJson = JSON.toJSONString(dataMap); ``` #### 6. 实体类要求 ```java public class User { // 必须包含无参构造器 public User() {} public User(String name, int age) { this.name = name; this.age = age; } // 必须有 getter 方法 private String name; public String getName() { return name; } private int age; public int getAge() { return age; } // 使用 transient 排除字段 private transient String password; } ``` #### 注意事项: 1. **字段可见性**:Fastjson 默认通过 getter 方法访问属性 2. **日期处理**:默认输出时间戳,可通过 `@JSONField` 注解格式化: ```java @JSONField(format = "yyyy-MM-dd") private Date birthDate; ``` 3. **循环引用**:默认检测到循环引用会抛出异常,可通过配置关闭: ```java String json = JSON.toJSONString(obj, SerializerFeature.DisableCircularReferenceDetect); ``` > 性能提示:Fastjson 在序列化速度上表现优异,特别适合高并发场景[^2][^5] ### 与其他库对比 | 操作 | Fastjson | Jackson | Gson | |------------------|------------------------------|--------------------------|---------------------| | 对象→JSON字符串 | `JSON.toJSONString(obj)` | `mapper.writeValueAsString(obj)` | `gson.toJson(obj)` | | 注解支持 | `@JSONField` | `@JsonIgnore` | `@Expose` | | 空值处理 | `SerializerFeature` 配置 | `@JsonInclude` | `excludeFieldsWithoutExposeAnnotation()` |
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值