对象转Json字符串时,忽略指定属性

本文介绍如何在不修改实体类的情况下,通过JsonConfig类排除不需要转换为JSON的字段。适用于需要保留原有接口功能同时新增移动端接口的情况。

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

问题描述:前段时间有个需求,在一个老项目(BS架构)上改造,整一些接口给移动端调用,然后基本是调用老系统的原有的接口就行,但是有些接口返回的实体对象,不需要某些字段,比如老系统的某个原接口是返回某个对象的a,b,c,d四个字段属性值,但是移动端只需要a,b字段属性值就行,这个时候如果在实体类相应的字段加@JSONField注解就影响到原接口的数据返回。

解决方法:json-lib.jar包提供了一个JsonConfig.class类可以解决。

首先在项目引入maven依赖:

<!-- 引入json-lib的依赖 -->
<dependency>
    <groupId>net.sf.json-lib</groupId>
    <artifactId>json-lib</artifactId>
    <version>2.4</version>
</dependency>

JsonConfig类提供了一个setExcludes(String[] excludes)方法可以解决,这个方法参数是传你想忽略转为json的属性字段,

比如,我有个User类,属性有id,name,gender,telephone,我想忽略telephone字段,可以写成如下代码所示即可:

User user = new User();
user.setId("1");
user.setGender("男");
user.setUsername("zls");
JsonConfig jsonConfig = new JsonConfig();
jsonConfig.setExcludes(new String[]{"telephone"});
String json = JSONObject.fromObject(user,jsonConfig).toString();

<think>我们使用FastJSON库将Java对象换为JSON字符串。FastJSON是阿里巴巴开源的JSON处理库,性能优秀且易于使用。 步骤: 1. 添加FastJSON依赖(如Maven项目在pom.xml中添加)。 2. 使用FastJSONJSON.toJSONString()方法将Java对象换为JSON字符串。 注意:FastJSON默认使用getter方法获取属性值,所以确保对象有public的getter方法(或者字段为public,但通常不推荐public字段,而是使用getter)。 示例代码: 假设有一个User类,我们将创建一个User对象换为JSON字符串。</think>### 使用FastJSON将Java对象换为JSON字符串 FastJSON是阿里巴巴开源的高性能JSON库,提供简单易用的API实现Java对象JSON之间的换。以下是详细步骤和示例: #### 步骤说明 1. **添加依赖** 在Maven项目的pom.xml中添加FastJSON依赖(使用引用[1]中的版本): ```xml <dependency> <groupId>com.alibaba.fastjson2</groupId> <artifactId>fastjson2</artifactId> <version>2.0.37</version> </dependency> ``` 2. **创建Java对象** 定义需要换的Java类(需包含getter方法): ```java public class Product { private String name; private double price; // 必须提供getter方法 public String getName() { return name; } public double getPrice() { return price; } public Product(String name, double price) { this.name = name; this.price = price; } } ``` 3. **执行换** 使用`JSON.toJSONString()`方法: ```java import com.alibaba.fastjson2.JSON; public class Main { public static void main(String[] args) { // 创建对象 Product product = new Product("笔记本电脑", 5999.99); // 换为JSON字符串 String jsonString = JSON.toJSONString(product); System.out.println(jsonString); // 输出: {"name":"笔记本电脑","price":5999.99} } } ``` #### 高级特性 1. **处理复杂对象** 支持嵌套对象和集合: ```java public class Order { private String orderId; private List<Product> items; // 嵌套对象集合 // getter方法... } // 换示例 List<Product> items = Arrays.asList( new Product("鼠标", 99.9), new Product("键盘", 199.9) ); Order order = new Order("ORD2023", items); String json = JSON.toJSONString(order); /* 输出: { "orderId": "ORD2023", "items": [ {"name":"鼠标","price":99.9}, {"name":"键盘","price":199.9} ] } */ ``` 2. **自定义序列化** 使用`@JSONField`注解控制字段行为: ```java public class User { @JSONField(name = "full_name") // 自定义字段名 private String name; @JSONField(serialize = false) // 忽略字段 private String password; // getter方法... } ``` 3. **格式化输出** 添加换行和缩进提高可读性: ```java String formattedJson = JSON.toJSONString(product, JSONWriter.Feature.PrettyFormat); ``` #### 性能建议 - **优势**:FastJSON在序列化速度上优于Gson,接近Jackson[^1] - **最佳实践**: 1. 重用`JSON`实例(线程安全) 2. 复杂对象使用`@JSONType`注解配置序列化规则 3. 避免频繁创建`JSONArray`/`JSONObject`实例 #### 常见问题解决 ```java // 问题:字段缺失 // 解决:确保所有需要序列化的字段都有public getter方法 public double getPrice() { ... } // ✅ 正确 // 问题:日期格式异常 // 解决:使用注解指定格式 @JSONField(format = "yyyy-MM-dd") private Date createDate; ``` > 参考引用[1]的版本说明,当前示例使用FastJSON 2.0.37实现[^1]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值