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

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

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

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

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

如图设置其属性。

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

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

  1. {"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,存放在当前目录下。

然后我们执行以下代码

  1. procedure TForm1.Button5Click(Sender: TObject);
  2. var
  3. sqls:string;
  4. begin
  5. sqls:='SELECT ID,name,date FROM datafile FILE(JSON,''.\aaa.json'')'
  6. +' SUBSET ''/result/.*'''
  7. +' ORDER BY ID';
  8. memo2.Lines.Clear;
  9. memo2.Lines.Add(sqls);
  10. kbmmwmemsql1.ExecSQL(sqls);
  11. end;

运行结果如下

加入条件,继续查询。

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

运行结果如下:

怎么样,方便不?

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

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

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

代码如下:

  1. procedure TForm1.Button6Click(Sender: TObject);
  2. var
  3. js:TkbmMWJSONStreamer;
  4. fjson:TkbmMWONCustomObject;
  5. sqls:string;
  6. begin
  7. js:=TkbmMWJSONStreamer.Create;
  8. fjson:=js.LoadFromUTF16String(memo1.Text);
  9. js.Free;
  10. kbmmwmemsql1.Tables.Add('MYJSONT',FJSON);
  11.  
  12. sqls:='SELECT ID,name,date FROM MYJSON'
  13. +' SUBSET ''/result/.*'''
  14. +' ORDER BY ID';
  15. memo2.Lines.Clear;
  16. memo2.Lines.Add(sqls);
  17. kbmmwmemsql1.ExecSQL(sqls);
  18. end;

运行结果如图

同样可以加入查询条件

  1. procedure TForm1.Button6Click(Sender: TObject);
  2. var
  3. js:TkbmMWJSONStreamer;
  4. fjson:TkbmMWONCustomObject;
  5. sqls:string;
  6. begin
  7. js:=TkbmMWJSONStreamer.Create;
  8. fjson:=js.LoadFromUTF16String(memo1.Text);
  9. js.Free;
  10. kbmmwmemsql1.Tables.Add('MYJSONT',FJSON);
  11.  
  12. sqls:='SELECT ID,name,date FROM MYJSON'
  13. +' SUBSET ''/result/.*'''
  14. +' where ID=6'
  15. +' ORDER BY ID';
  16. memo2.Lines.Clear;
  17. memo2.Lines.Add(sqls);
  18. kbmmwmemsql1.ExecSQL(sqls);
  19. 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. xshell常用的快捷键

    删除ctrl + d      删除光标所在位置上的字符相当于VIM里x或者dlctrl + h      删除光标所在位置前的字符相当于VIM里hx或者dhctrl + k      删除光标后面所 ...

  2. c#发送短信

    短息计费平台:http://sms.webchinese.cn/User/?action=key 代码: using System;using System.Collections.Generic;u ...

  3. 【linux】下Apache无法启动(8080端口被占用)

    Linux下8080端口被占用,apache无法启动. 打开终端输入netstat -lnp|grep 8080 发现竟然是tcp6 占用里,因此ipv6启用占用了端口. 1.打开/etc/sysct ...

  4. tomcat-maven-plugin的使用

    maven有一个把web应用部署到tomcat下的插件 tomcat-maven-plugin , 我们可以使用这个插件把web应用一键式的部署到一个远程的tomcat中. 插件的url: http: ...

  5. JQuery UI之Autocomplete(2)后端获取数据

    1.Autocomplete获取后台数据 首先引入css和js文件,以及对应的HTML代码如下: <link href="../css/jquery-ui.css" rel= ...

  6. YII2中添加自定义模块

    有些时候系统功能过于复杂,这时我们需要通过模块把一些功能区分开来,便于管理与维护. 我用的是Yii2的基本应用程序模板,程序其实已经给我们提供了一个模块,就是app本身.YII2中是可以无限嵌套模块的 ...

  7. Aspose.Words二 基础

    1.目录样式 doc.Styles[Aspose.Words.StyleIdentifier.Toc1].Font.Size = 14; doc.Styles[Aspose.Words.StyleId ...

  8. MyEclipse中抽取接口、父类

    选中要抽取接口的类-------->Refactor-------->Extact Interface-------->填写抽取的接口名-------->选择要抽取的方法(一般 ...

  9. ie6 PNG图片透明

    _background:none; _filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src=images/videoTips.pn ...

  10. Win32消息循环机制等【转载】http://blog.csdn.net/u013777351/article/details/49522219

    Dos的过程驱动与Windows的事件驱动 在讲本程序的消息循环之前,我想先谈一下Dos与Windows驱动机制的区别: DOS程序主要使用顺序的,过程驱动的程序设计方法.顺序的,过程驱动的程序有一个 ...