使用Fastjson生成Json字符串少字段属性

本文探讨了使用FastJson进行JSON序列化时遇到的问题,即某些对象属性未能正确转换为JSON字段的情况。通过对比Gson等其他库的表现,发现FastJson对属性名大小写敏感,导致部分字段缺失。文章提供了具体的解决方案。

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

格式化Object为json     JSON.toJSONString(Object)

格式化json为javaBean  JSON.parseObject(String, javaBean.class));


/**

* 将对象转换成JSON字符串,并响应回前台

* @param object
* @throws IOException
*/
public void writeJson(Object object) {
try {
SerializerFeature[] features = new SerializerFeature[]{SerializerFeature.DisableCircularReferenceDetect,SerializerFeature.WriteMapNullValue};
String json = JSON.toJSONString(object,features);
getResponse().setContentType("text/html;charset=utf-8");
getResponse().getWriter().write(json);
getResponse().getWriter().flush();
getResponse().getWriter().close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

}


public class StakeRateInfo {
private int gridStationSeq;
private String gridStationName;
private String stationNo;
private int stakeCount;// 充电桩总数
private int okStakeNum;// 正常充电桩
private int offlineStakeNum;// 离线充电桩数量
private int faultStakeNum;// 故障充电桩数量----------------//修改前是private int n nFaultStakeNum;
private float stakeRate;//充电桩效率

set/get自动生成省略



用FastJson就是少了个属性pId没有被转化出来,用Gson和其他的却可以,而我的Node对象只是个普通的JAVA类而已


答案:1)你的get,set方法估计多半是自动生成的,Fastjson在生成的时候去判断pId有没有对应的get方法是区分了大小写的,所以找不到对应的get方法(getPId())。

2)如果页面上也需要使用node对象,就必须使用自动生成的get、set方法。与1)相互冲突,最根本的解决办法是,不适用第一个单词只有一个小写字母的属性名,换一个属性名字paId


<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]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值