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

这几个单元。

kbmmw 中JSON 中使用SQL 查询的更多相关文章

  1. 在Delphi中动态地使用SQL查询语句 Adoquery sql 参数 冒号

    在Delphi中动态地使用SQL查询语句 在一般的数据库管理系统中,通常都需要应用SQL查询语句来提高程序的动态特性.下面介绍如何在Delphi中实现这种功能.在Delphi中,使用SQL查询语句的途 ...

  2. django中使用原生的sql查询实例

    在app文件夹下创建database_operations.py文件,写如下内容: import pymysql from 项目名.settings import DATABASES class Da ...

  3. Laravel框架中如何使用事件记录SQL查询到日志

    在本文中,我们将说一下如何处理Laravel中的查询日志记录.如果你非常熟悉Laravel框架,Laravel可以选择将所有在当前请求中运行的查询记录在内存中. 查询记录 如果,你想要将日志文件保存在 ...

  4. SpringBoot中JPA使用动态SQL查询

    https://www.jianshu.com/p/f72d82e90948 可以重点关注方法二,把原生sql传入数据库去查询 好处是:更加灵活坏处是:拼接sql比较痛苦,也容易出问题,比如拼接的sq ...

  5. QuerySet中添加Extra进行SQL查询

    select参数接受一个映射到SQL的字符串标识字典,让你可以根据SQL select子句里的选择进行对模型实例添加属性,或者查询. from blog.models import BlogPost& ...

  6. django 视图中执行原生的 sql 查询语句

    可以使用objects的raw()方法执行原生的sql语句,进行对数据库的查询操作,raw()方法只能执行查询语句 query_set = your_model.objects.raw("s ...

  7. jQuery中json中关于带有html代码网页的处理

    昨天在使用jQuery的get方式请求返回json格式数据.然后使用jQuery自带的parseJSON 处理.总是出现这样的错误. 如果返回数据中content改成普通的数据可以通过.找了半天错误, ...

  8. json中loads的用法

    python中json中的loads()和dumps()它们的作用经常弄换了,这里记录下,loads方法是把json对象转化为python对象,dumps方法是把pyhon对象转化为json对象,我是 ...

  9. SQL 查询总结

    参考资料: SELECT 查询语句格式与简单查询 SQL中distinct的用法 SQL 查询总结

随机推荐

  1. LightOJ - 1030 期望+dp

    题目链接:https://vjudge.net/problem/25907/origin 一个山洞,里面有有1到n个位置,每个位置都有一定的金币,你有一个六面的骰子,一开始你在1,每次摇到了哪个数就往 ...

  2. jackson java对象和json对象的互相转换

    概述 Jackson框架是基于Java平台的一套数据处理工具,被称为“最好的Java Json解析器”. Jackson框架包含了3个核心库:streaming,databind,annotation ...

  3. TZOJ 2560 Geometric Shapes(判断多边形是否相交)

    描述 While creating a customer logo, ACM uses graphical utilities to draw a picture that can later be ...

  4. easyui datagrid 表格不让选中(双层嵌套)

    代码: function local(role,region,ip){ $("#roleList").datagrid({ // title:'服务器监控列表', height:( ...

  5. 可变数据类型&不可变数据类型

    不同的变量在内存中有不同的存储空间,每个存储空间都有一个ID >>> a = 32 >>> id(a) # 查看ID 1571185856 >>> ...

  6. Asp.net Mvc之Action如何传多个参数

    最近,工作上有一个需要:用户查询日志文件信息,查看某一个具体日志信息,可能同时查看该日志所在日期的其他日志信息列表. 为完成此功能,我打算在URL中传入了两个参数,一个记录此日志时间,另外一个记录日志 ...

  7. Android自定义view(一):制作一个最最最简单的自定义view

    转载:https://blog.csdn.net/wsyizmao/article/details/78491422 浅谈安卓自定义view(一):制作一个最最最简单的自定义view 对于安卓程序员来 ...

  8. css外层透明,内层不透明

    外层div透明使用:background: rgba(0, 0, 0, 0.5); 内层div透明使用:opacity:1; 这么样就可以了.不要外层使用opacity,会影响内层也透明的.主要是rg ...

  9. javascript 获取html元素的三种方法

    操作HTML元素 你首先找到该元素. 三种方法来做这件事: 通过id找到HTML元素 通过标签名找到HTML元素 通过类名找到HTML元素 通过id查找HTML元素 在DOM中查找HTML元素的最简单 ...

  10. windbg 边学边记attach 进程和open dump的两个方式查看线程的占用cpu资源

    首先我是attach到进程的方式,附加到进程把. vs里边有个远程调试就是通过连接到远程机附加到进程操作的.在 有公网IP情况下挺好用,但涉及到nat穿越之类的,因为用户的不方便设置,这种调试方式也有 ...