首页 > 极客资料 博客日记
让查询可以使用 json path
2024-10-14 13:30:03极客资料围观18次
本篇文章分享让查询可以使用 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" />
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!
标签:
相关文章
最新发布
- Nuxt.js 应用中的 prerender:routes 事件钩子详解
- 【问题解决】Tomcat由低于8版本升级到高版本使用Tomcat自带连接池报错无法找到表空间的问题
- 【FAQ】HarmonyOS SDK 闭源开放能力 —Vision Kit
- 六、Spring Boot集成Spring Security之前后分离认证流程最佳方案
- 《JVM第7课》堆区
- .NET 8 高性能跨平台图像处理库 ImageSharp
- 还在为慢速数据传输苦恼?Linux 零拷贝技术来帮你!
- 刚毕业,去做边缘业务,还有救吗?
- 如何避免 HttpClient 丢失请求头:通过 HttpRequestMessage 解决并优化
- 让性能提升56%的Vue3.5响应式重构之“版本计数”