前面讲到了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. 树的子结构(python)

    题目描述 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构) # -*- coding:utf-8 -*- # class TreeNode: # def __ ...

  2. 高级测试岗位面试题---MARK

    直接手写一个python类 直接手写一个构造函数 紧接着上面的代码,直接手写,补充完整代码,要求对列表中的人进行排序,并筛选出分数大于80的人的名单,组成一个新的列表显示出来. class Perso ...

  3. ADB 运行原理

    ADB基本命令和简介 ADB就是Android Debug Bridge,Android调试桥的意思,很形象.需要在电脑上安装SDK Platform Tools 对应的版本才能使用 基于ADB的工具 ...

  4. Delphi: TGraphicControl支持PaintTo方法

    Delphi之TWinControl支持PaintTo方法,可以方便的Paint有句柄控件,而此方法,TGraphicControl没有. 这使得有时需要Paint无句柄控件诸如TLabel时颇为费事 ...

  5. django序列化单表的4种方法的介绍

    这里主要是讲序列化单表的几种方法 先看下models中设计的表结构 from django.db import models # Create your models here. class Book ...

  6. jQuery 与js判断是否单选复选选中

    js判断复选:这段代码昨天网上查看的资料没保存出处,抱歉 var obj=document.getElementsByName("diseaseSet"); //选择所有name= ...

  7. mybatis批量更新update-设置多个字段值 报错 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near

    mybatis批量更新update-设置多个字段值 2016年08月01日 12:49:26 姚一号 阅读数:29539 标签: mysql mybatis批量更新批量更新allowMultiQuer ...

  8. Windows 64 位 mysql 5.7.20 安装教程

    mysql 5.7以上版本包解压中没有data目录和my-default.ini和my.ini文件以及服务无法启动的解决办法以及修改初始密码的方法 mysql官网下载地址:https://dev.my ...

  9. [leetcode]122. Best Time to Buy and Sell Stock II 最佳炒股时机之二

    Say you have an array for which the ith element is the price of a given stock on day i. Design an al ...

  10. js继承的几种类型

    首先提供构造函数 1. 构造函数实现继承 原理:改变函数上下文实现继承(call,apply,return,bind) return {}/function(){}   如果返回值是对象 那么this ...