JsonObject
# 结构
top.zuoyu.mybatis.json.JsonObject为键值对容器,以键值的形式装载,数据结构为:
{
'field1' : 'value1',
'field2' : 'value2',
'field3' : 'value3',
...
}
键的类型为java.lang.String类型,值的类型可以为任何类型。
# 类型转换
内部默认已包含常规的类型转换,默认支持以下类型:
java.math.BigIntegerjava.math.BigDecimaljava.lang.Booleanjava.lang.Bytejava.lang.Characterjava.util.Datejava.lang.Doublejava.lang.Floatjava.lang.Integerjava.lang.Longjava.lang.Shortjava.lang.String
如果默认的转换器无法满足需求,或者需要转换为其他类型,可通过自定义转换器ConvertClass<T>进行实现,接口方法:
public interface ConvertClass<T> {
/**
* 将给定的 value 对象转换为 T 类型
*
* @param value - 给定对象
* @return 目标转换类型的对象
*/
T convert(Object value);
/**
* 将给定的 value 对象转换为 T 类型, 否则返回 defaultValue
*
* @param value - 给定对象
* @param defaultValue - 默认值
* @return 目标转换类型的对象
*/
T convert(Object value, T defaultValue);
}
# 示例
@Test
void convertTest() {
// 使用JSON字符串初始化对象
JsonObject student = new JsonObject(studentJSON);
// 获取学生的性别,如果无法转换则返回"未知"
String sex = student.getValue("sex", new SexConvert());
// 获取学生的性别,如果无法转换则返回"未录入"
String sexOrDefault = student.getValue("sex", new SexConvert(), "未录入");
}
static class SexConvert implements ConvertClass<String> {
@Override
public String convert(Object value) {
if (value instanceof Integer) {
if ((Integer) value == 1) {
return "男";
} else if ((Integer)value == 0) {
return "女";
}
}
return "未知";
}
@Override
public String convert(Object value, String defaultValue) {
if (value instanceof Integer) {
if ((Integer) value == 1) {
return "男";
} else if ((Integer)value == 0) {
return "女";
}
}
return defaultValue;
}
}
本示例也可使用StringConvert转换器,StringConvert为ConvertClass<T>的子接口。
也可以通过toClass方法,将JsonObject对象转换为指定类型的实体类。
# 子接口:
BigDecimalConvertBigIntegerConvertBooleanConvertByteConvertCharacterConvertDateConvertDoubleConvertFloatConvertIntegerConvertLongConvertShortConvertStringConvert