首页 > 其他分享 >高性能 Jsonpath 框架,Snack3 3.2.57 发布

高性能 Jsonpath 框架,Snack3 3.2.57 发布

时间:2023-03-04 12:13:16浏览次数:48  
标签:ONode Snack3 mobile list 57 List Jsonpath data select

Snack3,一个高性能的 JsonPath 框架

借鉴了 Javascript 所有变量由 var 申明,及 Xml dom 一切都是 Node 的设计。其下一切数据都以ONode表示,ONode也即 One node 之意,代表任何类型,也可以转换为任何类型。

  • 强调文档树的操控和构建能力
  • 高性能Json path查询(顶级的兼容性和性能)
  • 顺带支持序列化、反序列化
  • 基于 无参构造函数 + 字段 操作实现(反序列化时不会有触发危险动作的风险)
<dependency>
  <groupId>org.noear</groupId>
  <artifactId>snack3</artifactId>
  <version>3.2.57</version>
</dependency>

本次累计更新:

  • 增加 ClassLoader 自动指定能力
  • 增加 @NodeAttr 对 LocalTime,LocalDate,LocalDateTime 有效
  • 增加 selectOrNew() 接口,可根据 jsonpath 表达式构建结构;
ONode oNode = new ONode();
oNode.selectOrNew("$.orders[0].price").val(500);
System.out.println(oNode.toJson());
//{"orders":[{"price":500}]}

简单演示:

ONode o = ONode.loadStr(json); //将json String 转为 ONode
ONode o = ONode.loadObj(user); //将java Object 转为 ONode

//不确定返回数量的,者会返回array类型
//找到所有的187开头的手机号,改为186,最后输出修改后的json
o.select("$..mobile[?(@ =~ /^187/)]").forEach(n->n.val("186")).toJson();
//找到data.list[1]下的的mobile字段,并转为long
o.select("$.data.list[1].mobile").getLong();

//查找所有手机号,并转为List<String> 
List<String> list = o.select("$..mobile").toObject(List.class);
//查询data.list下的所有mobile,并转为List<String>
List<String> list = o.select("$.data.list[*].mobile").toObject(List.class);
//找到187手机号的用户,并输出List<UserModel>
List<UserModel> list = o.select("$.data.list[?(@.mobile =~ /^187/)]")
                        .toObjectList(UserModel.class);
//或
List<UserModel> list = o.select("$.data.list[?(@.mobile =~ /^187/)]")
                        .toObjectList(UserModel.class);

项目地址:

标签:ONode,Snack3,mobile,list,57,List,Jsonpath,data,select
From: https://www.cnblogs.com/noear/p/17178033.html

相关文章

  • 普冉PY32系列(六) 通过I2C接口驱动PCF8574扩展的1602LCD
    目录普冉PY32系列(一)PY32F0系列32位CortexM0+MCU简介普冉PY32系列(二)UbuntuGCCToolchain和VSCode开发环境普冉PY32系列(三)PY32F002A资源实测-这个型号不简......
  • 1757. 可回收且低脂的产品
    题目链接:https://leetcode.cn/problems/recyclable-and-low-fat-products/题目描述: 由题目可知,我们需要查找低脂可回收的产品编号,用一行就可以搞定:SELECTproduct_i......
  • 百瓦快充伤电池?1天两充用了574天后 我发现真相
    充电速度越快越伤电池,这个手机圈内的传闻曾经安慰了一代又一代“五福一安”iPhone的用户们。但反观越来越卷的安卓阵营,百瓦快充都已经成为了寻常事,这个传闻就成为了消费者......
  • CF1575 VP记录
    VPTime:2023-2-2719:10~23:10(实际上因为要sleeping,22:00直接run了)A按题意模拟。ilboolcmp(nodex,nodey){stringu=x.s,v=y.s;for(inti=0;i......
  • 2357. 使数组中所有元素都等于零 (Easy)
    问题描述2357.使数组中所有元素都等于零(Easy)给你一个非负整数数组nums。在一步操作中,你必须:选出一个正整数x,x需要小于或等于nums中最小的非零元素。n......
  • Xilinx URAM使用说明 UG573
    UltraRAMResourcesUltraRAMSummaryUltraRAM是单时钟、双端口、同步存储器,可用于UltraScale+™器件。由于UltraRAM与柱状(columnar)架构兼容,因此多个UltraRAM可......
  • 【LeeCode】957. N 天后的牢房 -- todo
    【题目描述】监狱中 ​​8​​ 间牢房排成一排,每间牢房可能被占用或空置。每天,无论牢房是被占用或空置,都会根据以下规则进行变更:如果一间牢房的两个相邻的房间都被占用或......
  • 算法刷题 Day 57 | ● 647. 回文子串 ● 516.最长回文子序列 ● 动态规划总结篇
    详细布置647.回文子串动态规划解决的经典题目,如果没接触过的话,别硬想直接看题解。https://programmercarl.com/0647.%E5%9B%9E%E6%96%87%E5%AD%90%E4%B8%B2.htm......
  • P5788 【模板】单调栈
    P5788【模板】单调栈【模板】单调栈题目背景模板题,无背景。2019.12.12更新数据,放宽时限,现在不再卡常了。题目描述给出项数为n的整数数列a_{1...n}。定义函数......
  • 力扣简557 反转字符串的单词2
    刚开始尝试像数组一样直接用找到一个单独的字符串就首尾双指针调换报错才知道java的String类一旦创建就不可以改变了又去看了字符串发现StringBuffer类型可以改变并且......