- 优化 统一初始化异常的描述
- 兼容 0E-10 表达式(没有小数点的科学计数法)
- Feature.UseSetter 增加无字段的属性支持
- 添加 flat 扁平化处理支持
- 添加 三种时间格式解析
- 修复 当节点不为 obj 时,使用
getNew(key)
会异常的问题
- 添加 oNode.parent(), oNode.parents(depth)
新增接口
oNode.usePaths() | 使用路径(把当前作为根级,深度生成每个子节点的路径)。一般只在根级生成一次 |
oNode.path() | 获取路径属性(可能为 null;比如临时集合) |
oNode.pathList() | 获取节点路径列表(如果是临时集合,会提取多个路径) |
- 调整 json path。数组为空时,min,max,sum,avg 为 null;count 为 0。保持与 sql 一样
- 优化在重组时的
[n]
兼容性
- 添加 first 和 last 函数
- 添加 jdk23 编译兼容
- 添加 Duration 反序列化支持
- 添加 uri 反序列化支持
- 优化 solon.mvc kotlin data class 带默认值的反序列化支持
- 取消 LocalDateTime XXX 格式符支持(不合理)
- 添加 LocalDateTime XXX 格式符支持(之前只支持 Date)
- 修复 WriteArrayClassName 还原失效的问题
- 添加 对OffsetTime时间类型的处理
- 修复 反序列化时传入的类型优先时,异常类失效的问题
- 优化 val(obj) 支持数组形态
- 优化 反序列化时传入的类型优先
- 添加 UseOnlySetter, UseGetter, UseOnlyGetter 特性
- 添加 ThData::clear 接口,用于清理 ThreadLocal 缓存
- 添加 Collections.EMPTY_MAP 等空集合的赋值支持
- 加强 部分格式验证
- 添加 Properties "type['a']" 风格的支持
- 添加 Properties "type[a]" 风格的支持
- 添加 Properties "type[]" 风格的支持
- 添加 Properties 增强模式(NameValues)转换
- 优化 实例化异常提示
- 添加 ONodeAttr::asString
- 修复 request1.result[*].relTickers[0].tickerId 表达式兼容问题
- 添加 时间解析格式 "yyyy-MM-dd'T'HH:mm:ss+HH:mm"
- 添加 OffsetDateTime 时间类型的处理
- 添加 ZonedDateTime 时间类型的处理
- 新增 特性 DisableCollectionDefaults
- 修复 EnumWrap 构造时 getEnumConstants 可能为 null 的问题
- 修复 C{final data:Map} 反序列化时 data 无数据的问题
- 解决
$..[?(@.treePath)]
表达式的兼容问题
- 增加特性:Feature.DisableClassNameRead
- 优化 recordable 识别,避免构造函数可能索引超界的问题
- 优化枚举序列化处理
- 修复根值为 string 时,没有做编码处理(偷懒了)
- 冲掉 3.2.77 版本
- 字段访问权限,移到执行时再请求
- 反序列化时大写的数字,当为 '' 时则为 null
- 增加 jsonpath 对 keys(), length(), size() 函数的支持
- 优化 结构型枚举自定义字段序列化处理
- 增加 结构型枚举自定义字段序列化支持
- 修复 bindTo(obj) 可能会返回 null 的问题
- 优化
$.[?(@.field == 'l1-field-1')].children[?(@.field == 'l2-field-1')]
兼容性 - 优化
$[?(@.field == 'l1-field-1')].children[?(@.field == 'l2-field-1')].fields[*]
兼容性
- 优化
$.*.*.*
的兼容性
- 修复
$..*[?(@.id)]
可能出现 value 项
- 增加 java record 的参数与字段去重处理
- 增加 Charset 反序化支持
- 增加 File 反序化支持
- 增加泛型多层嵌套支持: List<List>、Map<String,List>
- NodeAttr 增加时区支持
- 修复 {names:null} ,转为 A{names:List} 时, 会变成 A{names:List=[null]}
- 修复非静态成员类序列化时会死循环的问题
- 添加特性,解析时可让所有整型为长整型
- 添加漂亮格式化特性支持
- 增加 selectOrNew() 接口;//只支持简单索引查询时orNew,不支持条件表达式和函数
- 增加 ClassLoader 自动指定能力
- 增加 @NodeAttr 对 LocalTime,LocalDate,LocalDateTime 有效
- 增加指定 ClassLoader 支持
- 增加 kotlin data 类支持
- 增加 getOrNew(int index, ONodeType newNodeType) 接口
- 增加 getOrNew(String key, ONodeType newNodeType) 接口
- 增加 SerializeNulls 对 Map/nullValue 的控制(之前默认认输出)
- 增加 SerializeMapNullValues 特性
- 增加特性 BooleanNullAsFalse, NumberNullAsZero, ArrayNullAsEmpty
- 默认 features_def,不再包括 StringNullAsEmpty(旧的作用,也就只有 OValue::getString 上)
- ONode 在分析 date str 时,增加 trim() 处理
- 增加新特性 StringDoubleToDecimal (可保持小数不变位数)
- 修复反序列化时空字符转类的异常情况
- rename 时,相同名字则不处理
- 增加 string 转 int 的支持(之前只转 long)!!!
- 增加 任何数字可 转 date 的支持
- 增加特性 StringJsonToNode 对 ONode.loadObj() 的支持
- 修复反序列化时,只读保合不能被赋值的问题
- 添加 UUID 输出时,自动转为字符串格式
- 修复实现接口的枚举无法被识别为枚举的问题
- 当类型为 虚拟类 时,支持将 string 自动转换为 object
- 修复 jsonpath 出现 ._ 时,会出错的问题
- 增加 ONode::isUndefined() 接口
- 增加 ONode::exists(jpath)接口
- 调整 当有 key 时,其 null 值统一为 valueType;用于区别 isUndefined
- 修复 值为""时,转为 LocalDateTime 会出错的问题
- 增加 val 可自动转为集合的一部分(如果接收的是集合字段)
- 修复 name 特定情况下会出现空隔的问题
- 增加 name 值的格式控制
- 调整 \ 的解析方式
- 增加 LongAdder,DoubleAdder 反序列化支持
- 增加 jsonpath 内的选项传导
- 增加对 Properties 数组的转换支持
- 增加 @ONodeAttr(ignore,incNull)
- 增加特性:Feature.TransferCompatible (传输兼容处理)
- 增加对 isFinal 字段的注入支持
- 调整默认特性下 "\abc" 会输出 "\abc" 的问题(转到浏览器编码特性下处理)
- 增加与Properties 数组的相互转换能力,排序后再转换
- 当类型为 interface 时,支持将 string 自动转换为 object
- 优化异常处理
- 增加 新特性 UseSetter(即允许使用 setXxx)
- 枚举支持字符大小写
- 增加字符串 "true" 转为 Boolean
- 增加与Properties 的相互转换能力
- 增新加特性 Feature.DisThreadLocal
- 加回自建 ParameterizedTypeImpl 类,不然在jdk17里麻烦
- 增加 List<List> 之类的泛型支持
- 增加 toObject() 接口
- 去掉 ParameterizedTypeImpl ,改用自带的
- 增加对 kotlin data class 和 jdk14+ record 的序列化与反序列化支持
- 增加对成员类的反序列化支持
- 增加对只读字段的写入过滤
- 增加更复杂的泛型传导
- Options 取消功能特性,只留配置特性
- 增加接口 ONode::options(ops->...);
- 取消 Act0, Act1, Fun0, Fun4 临时功能接口
- 增加 @ONodeAttr 注解,取代旧的 @NodeName
- 增加接口 ONode::getRawString()
- 增加接口 ONode::getRawNumber()
- 增加接口 ONode::getRawBoolean()
- 增加接口 ONode::getRawDate()
- 增加接口 Options::getFeatures()
-
Constants 更名为 Options,并优化细节
-
ONode::get(key) ,不再自动为文档树添加节点;如有需要改用 ONode::getOrNew(key)
-
增加自定义编码与解码支持
import org.noear.snack.core.Options;
import java.util.Date;
public class DemoTest {
public void test(UserDto user) {
Options options = Options.def();
options.addEncoder(Date.class, (data, node)->{
node.val().setNumber(data.getTimes());
});
ONode oNode = ONode.loadObj(user, options);
}
}
- ObjectToer,Map 实例类型改为 LinkedHashMap
- 增加类型 SnackException
- 增加特性 WriteNumberUseString
- 增加注解:Node
- 改为完全基于字段操作(避免属性注入)
- 完全改造为基于 无参构函数 和 字段的操作。避免因数据注入而诱发恶意动作。
- 修改OValue对数字的存储统一为Number
- 增加 toObjectList接口新用法
- 优化 jsonpath 处理
- 完善fill机制
- 序列化通过过临时类,支持泛型
- 新增:toObject();
- 置为过期:toBean()toData();
- 添加json path