kbmmw 中JSON 中使用SQL 查询

简介: 前面讲到了kbmmw 的JSON 对象操作,如何快速的查找JSON 中的值? 一种办法就是通过遍历的方法,其实在kbmmw 还有一种灵活的查询方式, 就是通过SQL 方式查询JSON 中的值。也就是说用TKbmmwmemSQL 控件来实现。

前面讲到了kbmmw 的JSON 对象操作,如何快速的查找JSON 中的值?

一种办法就是通过遍历的方法,其实在kbmmw 还有一种灵活的查询方式,

就是通过SQL 方式查询JSON 中的值。也就是说用TKbmmwmemSQL 控件来实现。

TKbmmwmemSQL 也可以用来查询 XML 和 CSV 文件,今天只说一下JSON 的查询。

我们首先在窗体中放一个Tkbmmwmemsql 控件,

如图设置其属性。

直接使用kbmmwmemSQL控件查询JSON , 首先需要把json串 保存成文本文件。

这里提供一个简单的jSON 文件,内容如下:

 

{"result":[{"ID":1,"name":"xalion","date":"2017-07-05T23:05:48.290+08:00"},{"ID":2,"name":"xalion","date":"2017-07-05T23:05:48.290+08:00"},{"ID":3,"name":"xalion","date":"2017-07-05T23:05:48.290+08:00"},{"ID":4,"name":"xalion","date":"2017-07-05T23:05:48.290+08:00"},{"ID":5,"name":"xalion","date":"2017-07-05T23:05:48.290+08:00"},{"ID":6,"name":"xalion","date":"2017-07-05T23:05:48.290+08:00"},{"ID":7,"name":"xalion","date":"2017-07-05T23:05:48.290+08:00"},{"ID":8,"name":"xalion","date":"2017-07-05T23:05:48.290+08:00"},{"ID":9,"name":"xalion","date":"2017-07-05T23:05:48.290+08:00"},{"ID":10,"name":"xalion","date":"2017-07-05T23:05:48.290+08:00"}]}

 

文件名为aaa.json,存放在当前目录下。

然后我们执行以下代码

procedure TForm1.Button5Click(Sender: TObject);
var
  sqls:string;
begin
 sqls:='SELECT ID,name,date FROM datafile FILE(JSON,''.\aaa.json'')'
      +' SUBSET ''/result/.*'''
     +' ORDER BY ID';
  memo2.Lines.Clear;
  memo2.Lines.Add(sqls);
  kbmmwmemsql1.ExecSQL(sqls);
end;

运行结果如下

加入条件,继续查询。

procedure TForm1.Button5Click(Sender: TObject);
var
  sqls:string;
begin
 sqls:='SELECT ID,name,date FROM datafile FILE(JSON,''.\aaa.json'')'
      +' SUBSET ''/result/.*'''
      +' where ID=5'
      +' ORDER BY ID';
  memo2.Lines.Clear;
  memo2.Lines.Add(sqls);
  kbmmwmemsql1.ExecSQL(sqls);
end;

运行结果如下:

怎么样,方便不?

有的人可能觉得要存成文件,不方便,怎么办?

好吧,我们换个姿势,再来。

我们可以直接使用Tkbmmwmemsql 直接把JSON 对象加进去,然后像正常的表进行查询。

代码如下:

procedure TForm1.Button6Click(Sender: TObject);
var
   js:TkbmMWJSONStreamer;
   fjson:TkbmMWONCustomObject;
   sqls:string;
begin
     js:=TkbmMWJSONStreamer.Create;
     fjson:=js.LoadFromUTF16String(memo1.Text);
     js.Free;
     kbmmwmemsql1.Tables.Add('MYJSONT',FJSON);

     sqls:='SELECT ID,name,date FROM MYJSON'
      +' SUBSET ''/result/.*'''
      +' ORDER BY ID';
  memo2.Lines.Clear;
  memo2.Lines.Add(sqls);
  kbmmwmemsql1.ExecSQL(sqls);
end;

 

运行结果如图

同样可以加入查询条件

 

procedure TForm1.Button6Click(Sender: TObject);
var
   js:TkbmMWJSONStreamer;
   fjson:TkbmMWONCustomObject;
   sqls:string;
begin
     js:=TkbmMWJSONStreamer.Create;
     fjson:=js.LoadFromUTF16String(memo1.Text);
     js.Free;
     kbmmwmemsql1.Tables.Add('MYJSONT',FJSON);

     sqls:='SELECT ID,name,date FROM MYJSON'
      +' SUBSET ''/result/.*'''
      +' where ID=6'
      +' ORDER BY ID';
  memo2.Lines.Clear;
  memo2.Lines.Add(sqls);
  kbmmwmemsql1.ExecSQL(sqls);
end;

运行结果如图

打完收功。

 

注意,要运行以上例子,请引用kbmMWJSON, kbmMWSQLJSONAPI,kbmMWObjectNotation

这几个单元。

 

目录
相关文章
|
16天前
|
SQL 关系型数据库 MySQL
MYSQL根据查询结果删除sql 去除重复id 新增对比前一条与后一条数据 去重3种方法​ 窗口函数
MYSQL根据查询结果删除sql 去除重复id 新增对比前一条与后一条数据 去重3种方法​ 窗口函数
|
18天前
|
SQL Java 关系型数据库
Mybatis多表关联查询与动态SQL(下)
Mybatis多表关联查询与动态SQL
31 0
|
18天前
|
SQL Java 数据库连接
Mybatis多表关联查询与动态SQL(上)
Mybatis多表关联查询与动态SQL
19 0
|
9天前
|
SQL 监控 关系型数据库
【PolarDB开源】PolarDB SQL优化实践:提升查询效率与资源利用
【5月更文挑战第24天】PolarDB是高性能的云原生数据库,强调SQL查询优化以提升性能。本文分享了其SQL优化策略,包括查询分析、索引优化、查询重写、批量操作和并行查询,以及性能监控与调优方法。通过这些措施,可以减少响应时间、提高并发处理能力和降低成本。文中还提供了相关示例代码,展示如何分析查询和创建索引,帮助用户实现更高效的数据库管理。
41 1
|
10天前
|
SQL 关系型数据库 Java
实时计算 Flink版操作报错之在阿里云DataHub平台上执行SQL查询GitHub新增star仓库Top 3时不显示结果,是什么原因
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
|
10天前
|
SQL 关系型数据库 MySQL
简简单单 My SQL 学习笔记(3)——连接和嵌套查询
简简单单 My SQL 学习笔记(3)——连接和嵌套查询
|
10天前
|
SQL 关系型数据库 MySQL
简简单单 My SQL 学习笔记(2)——分组和简单数据的查询
简简单单 My SQL 学习笔记(2)——分组和简单数据的查询
|
14天前
|
SQL 关系型数据库 MySQL
查询mysql版本sql - 蓝易云
执行这个命令后,MySQL将返回当前正在运行的版本信息。
42 0
|
18天前
|
SQL 分布式计算 DataWorks
实时数仓 Hologres产品使用合集之查询分区表的生命周期(即之前设置的'auto_partitioning.num_retention'值)的SQL语句,可以使用什么查询
实时数仓Hologres是阿里云推出的一款高性能、实时分析的数据库服务,专为大数据分析和复杂查询场景设计。使用Hologres,企业能够打破传统数据仓库的延迟瓶颈,实现数据到决策的无缝衔接,加速业务创新和响应速度。以下是Hologres产品的一些典型使用场景合集。
|
18天前
|
SQL 前端开发
基于jeecgboot复杂sql查询的列表自定义列实现
基于jeecgboot复杂sql查询的列表自定义列实现
14 0