如何在JsonObject的add方法中使用Boolean类型并解决类型转换报错
你遇到的类型转换报错核心有两个可能的触发原因:
- 你使用的
javax.json版本低于1.1,该版本之前的JsonObjectBuilder没有提供直接接收boolean原生类型参数的add重载方法,传入的布尔值会被错误序列化,触发类型转换异常 - 你后续读取JSON字段时,错误地用
getString()方法读取布尔类型字段,也会触发该报错
兼容所有版本的标准构造方案
直接使用JSON API内置的布尔常量构造,不需要依赖版本支持原生布尔入参:
import javax.json.Json; import javax.json.JsonObject; import javax.json.JsonValue; public class BuildJson { public static void main(String[] args) { JsonObject json = Json.createObjectBuilder() .add("type", "AAA") // 布尔真值用JsonValue.TRUE,假值用JsonValue.FALSE .add("isForm", JsonValue.TRUE) .build(); // 验证输出 System.out.println(json); } }
取值注意事项
读取布尔字段时必须调用对应类型的方法,不能用字符串取值方法:
// 正确写法 boolean isForm = json.getBoolean("isForm"); // 错误写法,会触发你遇到的类型转换报错 // String isForm = json.getString("isForm");
高版本API简化写法
如果升级javax.json依赖到1.1及以上版本,可以直接传入原生布尔值构造:
<!-- Maven依赖参考 --> <dependency> <groupId>javax.json</groupId> <artifactId>javax.json-api</artifactId> <version>1.1.4</version> </dependency> <dependency> <groupId>org.glassfish</groupId> <artifactId>javax.json</artifactId> <version>1.1.4</version> <scope>runtime</scope> </dependency>
升级后你原来的构造代码可以直接正常运行:
JsonObject json = Json.createObjectBuilder() .add("type", "AAA") .add("isForm", true) .build();
内容的提问来源于stack exchange,提问作者Dom
相关产品推荐
相关产品推荐

