JsonObject
# 结构
top.zuoyu.mybatis.json.JsonObject
为键值对容器,以键值的形式装载,数据结构为:
{
'field1' : 'value1',
'field2' : 'value2',
'field3' : 'value3',
...
}
键的类型为java.lang.String
类型,值的类型可以为任何类型。
# 类型转换
内部默认已包含常规的类型转换,默认支持以下类型:
java.math.BigInteger
java.math.BigDecimal
java.lang.Boolean
java.lang.Byte
java.lang.Character
java.util.Date
java.lang.Double
java.lang.Float
java.lang.Integer
java.lang.Long
java.lang.Short
java.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
对象转换为指定类型的实体类。
# 子接口:
BigDecimalConvert
BigIntegerConvert
BooleanConvert
ByteConvert
CharacterConvert
DateConvert
DoubleConvert
FloatConvert
IntegerConvert
LongConvert
ShortConvert
StringConvert