首页 星云 工具 资源 星选 资讯 热门工具
:

PDF转图片 完全免费 小红书视频下载 无水印 抖音视频下载 无水印 数字星空

让查询可以使用 json path

编程知识
2024年10月14日 12:07

记录一下最近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" />
From:https://www.cnblogs.com/fs7744/p/18463884
本文地址: http://shuzixingkong.net/article/2463
0评论
提交 加载更多评论
其他文章 四、Spring Boot集成Spring Security之认证流程
Spring Security详细认证过程:包括登录时每个过滤器处理流程及业务处理和登出时每个过滤器处理流程及业务处理
四、Spring Boot集成Spring Security之认证流程 四、Spring Boot集成Spring Security之认证流程 四、Spring Boot集成Spring Security之认证流程
FFmpeg开发笔记(五十六)使用Media3的Exoplayer播放网络视频
​Android早期的MediaPlayer控件对于网络视频的兼容性很差,所以后来单独推出了Exoplayer库增强支持网络视频,在《Android Studio开发实战:从零基础到App上线(第3版)》一书第14章的“14.3.3 新型播放器ExoPlayer”就详细介绍了Exoplayer库的详
FFmpeg开发笔记(五十六)使用Media3的Exoplayer播放网络视频
揭秘 FineVideo 数据集构建的背后的秘密
开放视频数据集稀缺,因此减缓了开源视频 AI 的发展。为此,我们构建了 FineVideo,这是一个包含 43,000 个视频的数据集,总时长为 3,400 小时,并带有丰富的描述、叙事细节、场景分割和问答对。 FineVideo 包含高度多样化的视频和元数据集合,使其成为训练模型理解视频内容、训练
揭秘 FineVideo 数据集构建的背后的秘密 揭秘 FineVideo 数据集构建的背后的秘密 揭秘 FineVideo 数据集构建的背后的秘密
ProxyPin 抓包,原来可以这么简单!
​ 你是否还在为网络请求的抓包发愁?其实,ProxyPin 可以让抓包操作变得异常简单!不需要复杂的设置,也不用繁琐的配置,轻松几步就能实现。让我们一起来看看吧! 抓包操作常用于测试网络请求、分析接口响应,那么 ProxyPin 是如何让这一切变得更简单的呢?它有哪些特色功能,让我们一探究竟。 Pr
ProxyPin 抓包,原来可以这么简单! ProxyPin 抓包,原来可以这么简单! ProxyPin 抓包,原来可以这么简单!
如何在kubernetes环境中共享GPU
随着人工智能和大模型的快速发展,云上GPU资源共享变得必要,因为它可以降低硬件成本,提升资源利用效率,并满足模型训练和推理对大规模并行计算的需求。 在kubernetes内置的资源调度功能中,GPU调度只能根据“核数”进行调度,但是深度学习等算法程序执行过程中,资源占用比较高的是显存,这样就形成了很
如何在kubernetes环境中共享GPU 如何在kubernetes环境中共享GPU
(系列六).net8 全局异常捕获机制
说明 该文章是属于OverallAuth2.0系列文章,每周更新一篇该系列文章(从0到1完成系统开发)。 该系统文章,我会尽量说的非常详细,做到不管新手、老手都能看懂。 说明:OverallAuth2.0 是一个简单、易懂、功能强大的权限+可视化流程管理系统。 友情提醒:本篇文章是属于系列文章,看该
(系列六).net8 全局异常捕获机制 (系列六).net8 全局异常捕获机制 (系列六).net8 全局异常捕获机制
JavaScript原型链污染探讨
如果你想弄明白什么怎样才可以实现JavaScript的原型链污染,那么你首先需要弄清楚两个东西,那就是__proto__和prototype。 到底什么才是__proto__和prototype? 那我们先来看看比较官方的说法吧: __proto__:是每个对象的隐藏属性,指向创建该对象的构造函数的
JavaScript原型链污染探讨
数据结构 - 栈
栈是一种特殊线性数据结构,操作遵循后进先出原则,可解决表达式求值等问题。栈分为顺序栈和链栈,各有特点。文章详细介绍了栈的定义、分类及实现方式,包括顺序栈和链栈的ADT定义及基本操作实现。
数据结构 - 栈 数据结构 - 栈 数据结构 - 栈