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

高性能 Jsonpath 框架,Snack3 3.2.65 发布

时间:2023-04-11 11:14:07浏览次数:55  
标签:ONode Snack3 mobile list List Jsonpath 3.2 select

高性能 Jsonpath 框架,Snack3 3.2.65 发布

来源: 投稿 作者: 梅子酒好吃 2023-04-10 14:18:00  0

Snack3,一个高性能的 JsonPath 框架

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

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

本次累计更新:

  • 增加 File 类型反序化支持
  • 增加泛型多层嵌套支持: List<List>、Map<String,List>
  • 增加 NodeAttr 注解对时区的配置支持
  • 修复 "{names:null}" 转为 A {names:List} 时,会变成 A {names:List=[null]} 的问题
  • 修复非静态成员类序列化时会死循环的问题
  • 添加特性 (ParseIntegerUseLong),解析时可让所有整型为长整型
  • 添加漂亮格式化特性支持

简单演示:

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,List,Jsonpath,3.2,select
From: https://www.cnblogs.com/sexintercourse/p/17305525.html

相关文章

  • 今日总结(3.22 具体功能实现)
    切换城市packagecom.example.app_t;importandroidx.appcompat.app.AppCompatActivity;importandroid.content.Intent;importandroid.os.Bundle;importandroid.view.View;importandroid.widget.Button;publicclassMainActivity2extendsAppCompatActivityimpl......
  • EasyARM i.MX283A 完整系统制作指南(Linux 4.13.2+U-Boot 2017.09+BusyBox 1.27.2+Qt5
    原文:https://www.taterli.com/3213/标题老长呢.反正什么都是新的,所有都是开源的,除了下载工具以外,所有源码都有(据说下载工具也有,我懒得找了.),编译器源码自己也能做,但是没必要了.代码下载地址:https://github.com/nickfox-taterli/imx283a-new/releases/tag/v0.1首先有一个U......
  • Day 23 23.2 Scrapy框架之详解
    Scrapy框架详解【1】Spider类Spiders是定义如何抓取某个站点(或一组站点)的类,包括如何执行爬行(即跟随链接)以及如何从其页面中提取结构化数据(即抓取项目)。换句话说,Spiders是您为特定站点(或者在某些情况下,一组站点)爬网和解析页面定义自定义行为的地方。1、生成初始的Request......
  • 查看常用thinkphp3.2.x和thinkphp5.1.x版本方法
    1、Thinkphp3.2.x在\ThinkPHP\ThinkPHP.php文件中直接查找,例如//版本信息constTHINK_VERSION='3.2.4'; 2、由于tp3.2本身定义了版本信息的常量,所以也可以通过在控制器中打印版本信息的方法进行查看echoTHINK_VERSION;  3、查看tp5.1.x的版本信息方法一......
  • ENGG1310 P3.2 Resistor, Inductor, Capacitor, and RLC Circuits
    这一节里关于三相电的内容最为重要,注意复习Resistor电阻Physical2-terminalenergy-dissipativedevice.电阻定律电阻同样与温度\(T\)有关(然而Temperatureisneglectedforthetimebeing),一般来说温度越高,电阻越大电阻的伏安性质电阻的\(R\)功率损失(PowerL......
  • ThinkPHP 3.2 路径问题
    一、阿帕奇域名已经开始访问的时候:(去掉index.php)访问路径:http://wechatu.xd107.com/Pay/Index/payToJS路径代码:var$URL="__ROOT__/Pay/Index/";二、阿帕奇域名没开启:(没有掉index.php)访问路径:http://soft.amaitech.com/index.php?s=/Home/Login/index.htmlJS路径代码......
  • ThinkPHP 3.2公共类库、应用类库ThinkPHP/Library讲解
    一、ThinkPHP的类库主要包括公共类库和应用类库,都是基于命名空间进行定义和扩展的。只要按照规范定义,都可以实现自动加载。       公共类库公共类库通常是指ThinkPHP/Library目录下面的类库,例如:         Think目录:系统核心类库         Org目录:第......
  • 每日总结2023/3.28(pycharm创建pp工程)
            defcalculate_fee(distance_travelled):return10+2*distance_travelledforxin[1.0,3.0,5.0,9.0,10.0,20.0]:print(calculate_fee(x))   ......
  • 2023.03.29总结
    题目1:洛谷P2024题意有\(n\)个动物,每个动物都是\(A,B,C\)中的一种,其中\(A\)吃\(B\),\(B\)吃\(C\),\(C\)吃\(A\)。给定两种食物链关系。第一种说法是1XY,表示\(X\)和\(Y\)是同类。第二种说法是2XY,表示\(X\)吃\(Y\)。这两种关系有\(k\)条,一条关系......
  • 上周热点回顾(3.27-4.2)
    热点随笔:· 微软NewBingAI申请与使用保姆级教程(免魔法) (彭旭锐)· 【故障公告】下班前的一场暴风雨,爬虫爬至园宕机 (博客园团队)· 我试图通过这篇文章,教会你一种阅读源码的方式。 (why技术)· 亿万级分库分表后如何进行跨表分页查询 (Ron.Liang)· ChatGPT与码农的......