让查询可以使用 json path
记录一下最近sv.db的完善
1. 让查询可以使用 json path
有时候我们会存储 json 到 db,也有时会只取json部分数据,或者通过json部分数据进行过滤
所以sv.db 也支持这些场景,(目前只有 db 实现,json的操作都是依靠db json 函数)
举例:
数据
a.ExecuteNonQuery("""
INSERT INTO Weather
(name, value)
VALUES ('Hello', '{"a":2}'),('A', '{"a":3,"c":[4,5,{"f":7}]}')
""");
然后配置字段允许json
[Db(StaticInfo.Demo)]
[Table(nameof(Weather))]
public class Weather
{
[Select, Where, OrderBy]
public string Name { get; set; }
[Select(Field = "Value"), Where, OrderBy, Column(IsJson = true)]
public string V { get; set; }
}
api 方法不用做额外的实现
[HttpGet]
public async Task<object> Selects()
{
return await this.QueryByParamsAsync<Weather>();
}
用户查询api 时就可以对json字段进行任意操作,比如
curl --location 'http://localhost:5259/weather?Fields=v,json(v,'$.a',vvva)&OrderBy=json(v,'$.a') asc&Where=json(v,'$.a') != 1'
结果
{
"totalCount": null,
"rows": [
{
"vvva": 2,
"v": "{\"a\":2}"
},
{
"vvva": 3,
"v": "{\"a\":3,\"c\":[4,5,{\"f\":7}]}"
}
]
}
ps:json 实现对应 db json 函数
| db | json 函数 |
|---|---|
| SQLite | json_extract |
| PostgreSQL | jsonb_path_query_first |
| MySql | json_unquote(json_extract()) |
| sql server | JSON_QUERY |
2. 字段白名单验证
默认会对解析的statement结果进行字段验证,不通过的会返回 400
验证:
- 不在字段配置的白名单范围
- 不允许类似 1 = 1, 只能 field = 1
- 未配置 json 字段不允许使用 json 函数
如需改变 验证逻辑或自行验证,可以通过 SelectStatementOptions 自行处理
public record class SelectStatementOptions
{
public bool AllowNotFoundFields { get; init; } = false;
public bool AllowNonStrictCondition { get; init; } = false;
public Action<Statement> Visiter { get; init; } = null;
}
3. swagger 生成
安装 swagger
<PackageReference Include="SV.Db.Sloth.Swagger" Version="0.0.2.3" />
swagger gen 配置 sv.db 方法
builder.Services.AddSwaggerGen(c =>
{
c.AddDbSwagger();
});
api 方法配置 swagger
[DbSwaggerByType(typeof(Weather))]
[HttpGet]
public async Task<object> Selects()
{
return await this.QueryByParamsAsync<Weather>();
}
只需配置这些,swagger 将为大家自动生成字段描述
4. 主要功能已完善,已发布 nuget
如想尝试,只需安装所需 package
<PackageReference Include="SV.Db.Sloth.Swagger" Version="0.0.2.3" />
<PackageReference Include="SV.Db.Sloth.WebApi" Version="0.0.2.3" />
<PackageReference Include="SV.Db.Analyzers" Version="0.0.2.3">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="SV.Db.Sloth.MSSql" Version="0.0.2.3" />
<PackageReference Include="SV.Db.Sloth.MySql" Version="0.0.2.3" />
<PackageReference Include="SV.Db.Sloth.PostgreSQL" Version="0.0.2.3" />
<PackageReference Include="SV.Db.Sloth.Sqlite" Version="0.0.2.3" />
让查询可以使用 json path的更多相关文章
- JMeter 插件 Json Path 解析HTTP响应JSON数据
一.基本简介 JMeter 是一个不错的负载和性能测试工具,我们也用来做 HTTP API 接口测试.我们的 API 返回结果为JSON数据格式.JSON 简介,JSON 教程. JSON 已经成为数 ...
- JMeter 插件 Json Path 解析 HTTP 响应 JSON 数据(转)
JMeter 是一个不错的负载和性能测试工具,我们也用来做 HTTP API 接口测试.我们的 API 返回结果为 JSON 数据格式.JSON 简介,JSON 教程. JSON 已经成为数据交换格式 ...
- jmeter之--断言json响应&json path espressions的语法
一.提取所需要断言的内容: 响应数据如下:加入需要提取id为90的值 { , "name" : "python", "url" : &quo ...
- 继续说一下openjson 以及 json path 的使用 (2)
在openjson 里面,其实是可以把数据类型array里面的值遍历出来的,举个栗子 ) = N' {"name":"test", "obj" ...
- 【JEMTER】后置处理器JSON Path Extractor获取server端返回的json中某项值
需求1:点击所有报表模板时,server端返回所有报表模板的ID(templateId),测试时需要下载某个模板生成的报表 需求2:点击单个报表模板时,server端返回这个报表模板下的所有报表ID( ...
- jmeter里json path postprocessor的用法
后置处理器添加 json path postprocessor. 用处: 当前接口响应返回的json中提取内容,作为变量可以在不同的请求中传递. 如下,从登陆接口返回的json中提取user id,变 ...
- SQL FOR JSON PATH 返回 json
--直接返回 age FOR JSON PATH --返回值 [{"name":"张学友","age":60}] select c1, c2 ...
- 查询返回JSON数据结果集
查询返回JSON数据结果集 设计目标: 1)一次性可以返回N个数据表的JSON数据 2)跨数据库引擎 { "tables": [ { "cols": [ { & ...
- Jmeter 中JSON Path Extractor高级用法
好久没玩jemter了,由于项目原因又重新拾起.在使用JSON Path Extractor(jmeter 4.0已经默认支持了,4.0以下要自行安装插件)时,可以进行条件过滤,不用再自行写shell ...
- JMeter----正则表达式&JSON Path Extractor
最近在用JMerter给公司一个项目做性能测试,期间遇到要提取上一个接口返回的数据作为下个接口的请求.这里做下记录 如图所示,需要将“扫描二维码”接口请求的返回值中的data部分,作为“处理提交码值” ...
随机推荐
- 【Project】原生JavaWeb工程 01 概述,搭建
一.环境准备: 操作系统:Windows7 或者 Windows10 IDE集成环境:IDEA 2018版本或者更高 数据库:MySQL 5版本或者更高 服务器:Tomcat 8版本或者更高 二.数据 ...
- 【Vue】Re14 Router 第一部分(入门案例)
一.箭头函数(Lambda匿名函数) <!DOCTYPE html> <html lang="en"> <head> <meta char ...
- 【转载】 关于Numpy数据类型对象(dtype)使用详解
原文地址: https://www.cnblogs.com/dreamboy2000/p/15350478.html ========================================= ...
- MAML —— Model-Agnostic Meta-Learning for Fast Adaptation of Deep Networks
论文地址: https://arxiv.org/abs/1703.03400 官方代码: 有监督学习: https://github.com/cbfinn/maml 强化学习: https://git ...
- 架构演化学习思考(4) --- IOC的学习认识
架构演化学习思考(4) IOC的学习认识[1] IOC相关概念认识 什么是IOC? IOC全称为 Inversion Of Control ,即控制反转.它是一种控制思想,可以解释为类和类之间的依赖关 ...
- 再探GraphRAG:如何提升LLM总结能力?
作者:王振亚 编者语: 自微软发布GraphRAG之后,相关解读文层出不穷,其中不乏优秀的内容.比如前段时间转载薛明同学的<微软GraphRAG框架源码解读>让大家快速对GraphRAG的 ...
- Deformable DETR:商汤提出可变型 DETR,提点又加速 | ICLR 2021 Oral
DETR能够消除物体检测中许多手工设计组件的需求,同时展示良好的性能.但由于注意力模块在处理图像特征图方面的限制,DETR存在收敛速度慢和特征分辨率有限的问题.为了缓解这些问题,论文提出了Deform ...
- rk3568 | 瑞芯微平台GPIO引脚驱动编写
最近在玩瑞芯微平台的产品,移植了几个设备的驱动,遇到了一些问题,总结后发现大部分问题都出在了GPIO配置的问题上,写下本篇文章,用来分享一下调试的心得. 有喜欢瑞芯微的朋友,可以加我好友,拉你进群,一 ...
- 网卡DM9000裸机驱动详解
一.网卡 1. 概念 网卡是一块被设计用来允许计算机在计算机网络上进行通讯的计算机硬件.由于其拥有MAC地址,因此属于OSI模型的第2层.它使得用户可以通过电缆或无线相互连接. 每一个网卡都有一个被称 ...
- 【Jenkins】Mac系统之忘记jenkins密码,如何修改密码
参考文章<jenkins管理员密码登录不了> 一.修改config.xml文件 Mac下的文件在 /Users/xxx/.jenkins/users/登录的用户名/config.xml 复 ...