在 Java 开发场景中,JSON 数据生成的方式有多种,而基于 Java Bean 构建 JSON 是最贴合企业级开发规范、也是最推荐使用的方式。Java Bean 作为标准化的实体类结构,能够精准映射业务数据模型,其属性定义可与 JSON 的核心数据类型(string、number、boolean、null、数组等)一一对应,同时还能通过关键字控制字段的序列化行为,让 JSON 数据生成更具规范性和可维护性。相比直接使用 JSONObject 或 Map 构建 JSON,Java Bean 的方式更符合 “面向对象” 的开发思想,也便于后续的代码复用、数据校验与扩展。接下来我们将通过完整的代码演示,详解如何定义适配 JSON 数据结构的 Java Bean,并借助 JSONObject 将其转化为标准的 JSON 数据,深入理解 Java Bean 与 JSON 数据类型、结构的映射逻辑。
代码演示:
package com.myimooc.json.model;
import java.util.Arrays;
/**
* Created by ChangComputer on 2017/5/21.
*/
public class Diaosi {
private String name;
private String school;
private boolean has_girlfriend;
private double age;
private Object car;
private Object house;
private String[] major;
private String comment;
private String birthday;
// 使用 transient 关键字,生成 JSON 时忽略该字段
private transient String ignore;
public String getIgnore() {
return ignore;
}
public void setIgnore(String ignore) {
this.ignore = ignore;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSchool() {
return school;
}
public void setSchool(String school) {
this.school = school;
}
public boolean isHas_girlfriend() {
return has_girlfriend;
}
public void setHas_girlfriend(boolean has_girlfriend) {
this.has_girlfriend = has_girlfriend;
}
public double getAge() {
return age;
}
public void setAge(double age) {
this.age = age;
}
public Object getCar() {
return car;
}
public void setCar(Object car) {
this.car = car;
}
public Object getHouse() {
return house;
}
public void setHouse(Object house) {
this.house = house;
}
public String[] getMajor() {
return major;
}
public void setMajor(String[] major) {
this.major = major;
}
public String getComment() {
return comment;
}
public void setComment(String comment) {
this.comment = comment;
}
public String getBirthday() {
return birthday;
}
public void setBirthday(String birthday) {
this.birthday = birthday;
}
@Override
public String toString() {
return "Diaosi{" +
"name='" + name + '\'' +
", school='" + school + '\'' +
", has_girlfriend=" + has_girlfriend +
", age=" + age +
", car=" + car +
", house=" + house +
", major=" + Arrays.toString(major) +
", comment='" + comment + '\'' +
", birthday='" + birthday + '\'' +
", ignore='" + ignore + '\'' +
'}';
}
}
/**
* 通过 JavaBean 生成JSON【推荐使用】
*/
public static void createJsonByBean(){
Diaosi wangxiaoer = new Diaosi();
wangxiaoer.setName("王小二");
wangxiaoer.setAge(25.2);
wangxiaoer.setBirthday("1990-01-01");
wangxiaoer.setSchool("蓝翔");
wangxiaoer.setMajor(new String[]{"理发","挖掘机"});
wangxiaoer.setHas_girlfriend(false);
wangxiaoer.setCar(null);
wangxiaoer.setHouse(null);
wangxiaoer.setComment("这是一个注释");
// 通过 JSONObject 的构造函数接收一个 Bean 生成 JSON
System.out.println(new JSONObject(wangxiaoer).toString());
}
上述案例完整展现了 Java Bean 与 JSON 数据类型、结构的深度适配,是企业级开发中 JSON 生成的最优实践。从数据类型映射来看,Java Bean 中的name(String)对应 JSON 的 string 类型、age(double)对应 JSON 的 number 类型、has_girlfriend(boolean)对应 JSON 的 boolean 类型、car/house(Object 赋值 null)对应 JSON 的 null 类型、major(String 数组)对应 JSON 的 Array 类型,完全覆盖了 JSON 的核心数据类型;从扩展特性来看,通过transient关键字修饰ignore字段,实现了 JSON 序列化时忽略指定字段的需求,这也是实际开发中处理非传输字段的常用技巧。相比 Map 或直接使用 JSONObject 的方式,Java Bean 的优势在于强类型约束 —— 既能在编译期发现数据类型错误,又能通过标准化的 get/set 方法统一数据操作逻辑,大幅提升代码的可读性和可维护性。掌握这种构建方式,不仅能深刻理解 JSON 数据类型与 Java 数据类型的对应关系,更能贴合实际开发规范,为复杂业务场景下的 JSON 数据处理(如嵌套 Bean、批量数据生成)打下基础。
正在加载... ...