kbmmw 中JSON 中使用SQL 查询

Posted Delphi 窑洞

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了kbmmw 中JSON 中使用SQL 查询相关的知识,希望对你有一定的参考价值。

前面讲到了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

这几个单元。

 2021年1月15日 补记:

 最新版的kbmmw 支持 直接JSON 文本查询,使用起来更方便点。

SELECT ID,name,date FROM data TEXT(JSON,\'{"result":[{"ID":1,"name":"xalion","date":"2021-01-15T23:42:59.634+08:00"},
{"ID":2,"name":"xalion","date":"2021-01-15T23:42:59.634+08:00"},
{"ID":3,"name":"xalion","date":"2021-01-15T23:42:59.634+08:00"},
{"ID":4,"name":"xalion","date":"2021-01-15T23:42:59.634+08:00"},
{"ID":5,"name":"xalion","date":"2021-01-15T23:42:59.634+08:00"},
{"ID":6,"name":"xalion","date":"2021-01-15T23:42:59.634+08:00"},
{"ID":7,"name":"xalion","date":"2021-01-15T23:42:59.634+08:00"},
{"ID":8,"name":"xalion","date":"2021-01-15T23:42:59.634+08:00"},
{"ID":9,"name":"xalion","date":"2021-01-15T23:42:59.634+08:00"},
{"ID":10,"name":"xalion","date":"2021-01-15T23:42:59.634+08:00"}]}
\') SUBSET \'/result/.*\' ORDER BY ID

 

运行效果如图

 

以上是关于kbmmw 中JSON 中使用SQL 查询的主要内容,如果未能解决你的问题,请参考以下文章

kbmmw 与extjs 通过JSON Base64 显示图片

kbmmw 中XML 操作入门(跨平台,而且可以与JSON,YAML,BSON 直接互相转换)

sql [SQL查询片段]用于在命令行或通过R和其他工具使用SQL的快速代码段#tags:sql,R,text processing,命令li

GraphQL 片段 JSON 格式

Microsoft SQL Server 代码片段收集

kbmmw 中实现客户端自动更新