现在各种系统中JSON 用的越来越多。delphi 也自身支持JSON 处理。

今天简要说一下kbmmw 内部如何使用和操作JSON。

kbmmw 中json的操作是以TkbmMWJSONStreamer 为基础,要导入、导出JSON字符串, 首先要创建TkbmMWJSONStreamer.

然后是 TkbmMWJSONObject和 TkbmMWJSONArray。

先举一个最简单的例子。

procedure TForm1.Button3Click(Sender: TObject);
var
myjson:TkbmMWJSONStreamer;
alljson: TkbmMWJSONObject;
s:String;
begin myjson:=TkbmMWJSONStreamer.Create; // 建立JSON流 alljson:=TkbmMWJSONObject.Create; // 建立JSON 对象 alljson.AsString['root']:='ok'; // 赋值 s:=myjson.SaveToUTF16String(alljson);
memo1.Lines.Clear;
memo1.Lines.Add(s); alljson.Free;
myjson.Free;
end;

以上代码运行结果为

{"root":"ok"}

继续修改添加一些代码

procedure TForm1.Button3Click(Sender: TObject);
var
myjson:TkbmMWJSONStreamer;
alljson: TkbmMWJSONObject;
djson:TkbmMWJSONObject;
s:String;
begin myjson:=TkbmMWJSONStreamer.Create; alljson:=TkbmMWJSONObject.Create; djson:=TkbmMWJSONObject.Create; // 新建一个子对象 djson.Asinteger['ID']:=;
djson.AsString['name']:='xalion';
djson.AsDateTime['date']:=now; alljson.AsObject['result']:=djson; s:=myjson.SaveToUTF16String(alljson);
memo1.Lines.Clear;
memo1.Lines.Add(s); alljson.Free;
myjson.Free; end;

这样返回的结果如下

{"result":{"ID":1,"name":"xalion","date":"2017-07-01T01:00:00.427+08:00"}}

即返回一条记录信息。

如果需要返回多条记录,就需要使用TkbmMWJSONArray。

procedure TForm1.Button3Click(Sender: TObject);
var
myjson:TkbmMWJSONStreamer;
alljson: TkbmMWJSONObject;
djson:TkbmMWJSONObject;
datajson: TkbmMWJSONArray;
s:String;
I: Integer;
begin myjson:=TkbmMWJSONStreamer.Create; // 建立一个JSON 流 alljson:=TkbmMWJSONObject.Create; // 建立一个JOSN 根对象 datajson:=TkbmMWJSONArray.Create; //建立一个JSON 数组 for I := to do
begin
djson:=TkbmMWJSONObject.Create;
djson.Asinteger['ID']:=i;
djson.AsString['name']:='xalion';
djson.AsDateTime['date']:=now; datajson.Add(djson); // 加入数据 end; alljson.AsArray['result']:=datajson; s:=myjson.SaveToUTF16String(alljson);
memo1.Lines.Clear;
memo1.Lines.Add(s); alljson.Free;
myjson.Free; end;

最后输出结果为

{"result":[{"ID":1,"name":"xalion","date":"2017-07-01T01:16:44.960+08:00"},{"ID":2,"name":"xalion","date":"2017-07-01T01:16:44.960+08:00"},{"ID":3,"name":"xalion","date":"2017-07-01T01:16:44.960+08:00"},{"ID":4,"name":"xalion","date":"2017-07-01T01:16:44.960+08:00"},{"ID":5,"name":"xalion","date":"2017-07-01T01:16:44.960+08:00"},{"ID":6,"name":"xalion","date":"2017-07-01T01:16:44.960+08:00"},{"ID":7,"name":"xalion","date":"2017-07-01T01:16:44.960+08:00"},{"ID":8,"name":"xalion","date":"2017-07-01T01:16:44.960+08:00"},{"ID":9,"name":"xalion","date":"2017-07-01T01:16:44.960+08:00"},{"ID":10,"name":"xalion","date":"2017-07-01T01:16:44.960+08:00"}]}

下面讲一下如何访问JSON字符串里面的对象和值

procedure TForm1.Button4Click(Sender: TObject);
var
myjson:TkbmMWJSONStreamer;
alljson: TkbmMWJSONObject;
begin
myjson:=TkbmMWJSONStreamer.Create; // 建立一个JSON 流 alljson:=TkbmMWJSONObject( myjson.LoadFromUTF16String(memo1.Lines.Text)); // 载入到根JSON memo2.Lines.Clear; memo2.Lines.Add(alljson.AsString['root']); alljson.Free;
myjson.Free; end;

运行截图

访问对象

procedure TForm1.Button4Click(Sender: TObject);
var
myjson:TkbmMWJSONStreamer;
alljson: TkbmMWJSONObject;
begin
myjson:=TkbmMWJSONStreamer.Create; // 建立一个JSON 流 alljson:=TkbmMWJSONObject( myjson.LoadFromUTF16String(memo1.Lines.Text)); // 载入到根JSON memo2.Lines.Clear; memo2.Lines.Add(alljson.AsObject['result'].AsString['name'] ); alljson.Free;
myjson.Free; end;

运行结果

访问数组

procedure TForm1.Button4Click(Sender: TObject);
var
myjson:TkbmMWJSONStreamer;
alljson: TkbmMWJSONObject;
jresult:TkbmMWJSONArray;
begin
myjson:=TkbmMWJSONStreamer.Create; // 建立一个JSON 流 alljson:=TkbmMWJSONObject( myjson.LoadFromUTF16String(memo1.Lines.Text)); // 载入到根JSON memo2.Lines.Clear; jresult:=TkbmMWJSONArray(alljson.AsArray['result']); // 返回数组 memo2.Lines.Add(jresult.AsObject[].AsString['name'] ); alljson.Free;
myjson.Free; end;

运行结果

延伸一下

procedure TForm1.Button4Click(Sender: TObject);
var
myjson:TkbmMWJSONStreamer;
alljson: TkbmMWJSONObject;
jresult:TkbmMWJSONArray;
i:integer;
begin
myjson:=TkbmMWJSONStreamer.Create; // 建立一个JSON 流 alljson:=TkbmMWJSONObject( myjson.LoadFromUTF16String(memo1.Lines.Text)); // 载入到根JSON memo2.Lines.Clear; jresult:=TkbmMWJSONArray(alljson.AsArray['result']); // 返回数组 memo2.Lines.Add(jresult.AsObject[].AsString['name'] ); memo2.lines.Add('数组大小:'+jresult.Count.ToString );
memo2.lines.Add('属性个数:'+jresult.AsObject[].PropertyCount.ToString ); for I := to jresult.AsObject[].PropertyCount do memo2.lines.Add('属性'+i.ToString+'名:'+jresult.AsObject[].PropertyName[i-]); alljson.Free;
myjson.Free; end;

运行结果

总之,用kbmmw 操作JSON 非常方便,更牛的是,这个可以与XML,BSON,YAML 实现无缝互转。

kbmmw 中JSON 操作入门的更多相关文章

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

    delphi 很早以前就自带了xml 的操作,最新版里面有三种XML 解释器,一种是MSXML,看名字就知道 这个是微软自带的,这个据delphi 官方称是速度是最快的,但是只能在windows 上使 ...

  2. kbmmw 中XML 操作入门

    delphi 很早以前就自带了xml 的操作,最新版里面有三种XML 解释器,一种是MSXML,看名字就知道 这个是微软自带的,这个据delphi 官方称是速度是最快的,但是只能在windows 上使 ...

  3. kbmmw 中JSON 中使用SQL 查询

    前面讲到了kbmmw 的JSON 对象操作,如何快速的查找JSON 中的值? 一种办法就是通过遍历的方法,其实在kbmmw 还有一种灵活的查询方式, 就是通过SQL 方式查询JSON 中的值.也就是说 ...

  4. jquery中Json操作

    在开发中,我们有可能拿到的不是全的json,而是一部分json格式的数据,这个时候我们需要将其强转为json对象 第一种方法:使用jquery中的$.parseJSON(),但是它对json数据格式的 ...

  5. python中json操作

    1.写操作.json文件dumps().dump()函数 d = { 'zll': { 'addr': '北京', 'age': 28 }, 'ljj': { 'addr': '北京', 'age': ...

  6. python中json操作了解

    什么是接口? 交换数据 http://openweathermap.org/current json简介 JSON 是存储和交换文本信息的语法.类似 XML JSON 语法是 JavaScript 语 ...

  7. kbmmw 中虚拟文件操作入门

    kbmmw 中一直有一个功能,但是基本上都没有提过,但是在实际应用中,却非常有用,这个功能就是 虚拟文件包功能,他可以把一大堆文件保存到一个文件里面,方便后台管理. kbmmw 的虚拟文件在单元kbm ...

  8. js中如何操作json数据

    一.要想熟练的操作json数据,就先要了解json数据的结构,json有两种结构:对象和数组. 1.对象 一个对象以“{”开始,“}”结束.每个“名称”后跟一个“:”:“‘名称/值’ 对”之间使用“, ...

  9. 【转】python 历险记(四)— python 中常用的 json 操作

    [转]python 历险记(四)— python 中常用的 json 操作 目录 引言 基础知识 什么是 JSON? JSON 的语法 JSON 对象有哪些特点? JSON 数组有哪些特点? 什么是编 ...

随机推荐

  1. eclipse启动tomcat后,无法通过路径访问项目

    eclipse已启动,访问localhost:8080也出现了tomcat页面,但是无法通过项目路径去访问项目,解决办法: 在控制台区域打开tomcat server,默认是第一项,且无法修改: 先把 ...

  2. CentOS 7安装Zabbix 3.4

    01.最小化安装操作系统 02.升级系统组件到最新版本 yum -y update 03.关闭 SELinux sed -i “s/SELINUX=enforcing/SELINUX=disabled ...

  3. label标签的显示和隐式关联问题

    按钮的html <!-- 学校 --> <div class="layui-inline"> <label class="layui-for ...

  4. oracle 中从某天到某天一天一次执行某个函数

    DECLAREv_days INTEGER;v_start VARCHAR2(10);v_end VARCHAR2(10);v_3 INTEGER;v_enddays date;begin v_sta ...

  5. Java之成员访问控制

    Java中数据成员.方法成员有四种访问控制.

  6. angular小技巧随笔

    1. 重新刷新页面 同页面切换状态: $state.go('tab.index', {inviteId:inviteId}); self.location.reload();

  7. c#: 以模态窗口显示于其它进程窗体之前

    产品之工具箱,需要工具以模态窗体,显示于主界面之上.记下代码点,以做备忘. 1.IWin32Window internal class Win32Window : IWin32Window { pub ...

  8. stark组件之pop操作【模仿Django的admin】

    一.先看下什么django的admin的pop到底是个什么东西 其实就是这么一个东西, a.在添加页面,在一对多和多对多的项后加了一个+号 b.点击这个加号,会弹出对应的添加 页面,在新的添加 c.添 ...

  9. 在ALV界面添加下拉框

    1.在alv界面表单属性中设置 if wa_fieldcat-fieldname = 'YC_MARK'.              wa_fieldcat-edit = 'X'.           ...

  10. golang基础学习

    一.输出hello,world程序 package main; import "fmt"; func main() { fmt.Printf("hello,world&q ...