zoukankan      html  css  js  c++  java
  • 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

    这几个单元。

  • 相关阅读:
    MyBatis参数传入集合之foreach动态sql
    【mybatis】多次查询缓存的问题
    svn is already locked解决方案
    Python 命令行之旅:使用 docopt 实现 git 命令
    Django 官方推荐的姿势:类视图
    这可能就是你苦苦寻找免费、高颜值、功能强大的 Markdown 编辑器(共5款)
    超级好用的 Java 数据可视化库:Tablesaw
    让你如“老”绅士般编写 Python 命令行工具的开源项目:docopt
    开发 Django 博客文章阅读量统计功能
    使用 Docker 让部署 Django 项目更加轻松
  • 原文地址:https://www.cnblogs.com/xalion/p/7121713.html
Copyright © 2011-2022 走看看