现在各种系统中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. openstack(Pike 版)集群部署(五)--- Neutron 部署

    一.介绍 参照官网部署:https://docs.openstack.org/neutron/pike/install/install-rdo.html    继续上一博客进行部署:http://ww ...

  2. css设置input不显示光标

    把光标颜色设置为透明色和父类一样就看不出来了,就好像取消了 caret-color: transparent; 设置了这个属性后,无论如何点击都好像没有光标似的

  3. 项目总结14:Windows远程连接redis(cmd指令或PowerShell指令)

    1-确认远程的redis服务器是否允许被远程连接,已redis server安装在阿里云ECS上为例 1-1-确认在阿里云控制台,开放了端口6379和允许访问的IP 1-2-确认在服务器上安装redi ...

  4. 分布式大数据多维分析(OLAP)引擎Apache Kylin安装配置及使用示例【转】

    Kylin 麒麟官网:http://kylin.apache.org/cn/download/ 关键字:olap.Kylin Apache Kylin是一个开源的分布式分析引擎,提供Hadoop之上的 ...

  5. 关于viewport我自己的理解

    其实即使不在html中添加meta viewport标签,每个移动端浏览器都会有一个默认的viewport,只是这个viewport的宽度是980,然后做1:3或者1:2的自动缩放.所以当不在html ...

  6. Java05-Java基础语法(四)循环结构

    Java05-Java基础语法(四)循环结构 循环结构(重复/迭代):根据条件重复执行部分语句 1.while循环结构 while(条件表达式){ 循环体语句; } 1)语法:a.while是关键字 ...

  7. 11-web网页制作APP

    如何将H5和WebApp 加壳成apk.ipa     问题:已经做好的纯H5的站点 想分别加两个壳子,变成apk和ipa ,要怎么实现? 要点: 1. app只是壳子,打开app直接跳转到H5的Ur ...

  8. 编程:在屏幕中间分别显示绿色、绿底红色、白底蓝色的字符串'welcome to masm!'

    80*25彩色字符模式显示缓冲区的结构: 内存地址空间中,B8000H~BFFFFH共32KB的空间,为80*25彩色字符模式的显示缓冲区.向这个地址空间写入数据,写入的内容将立即出现在显示器上. 在 ...

  9. 安装doxygen(一个自动文档生成工具)+Graphviz图形可视化软件

    参考文章: http://www.fmddlmyy.cn/text21.html http://www.cnblogs.com/duguguiyu/archive/2008/06/29/1231852 ...

  10. C#实现发送给QQ邮件

    最近在做一个通过点击忘记密码往用户邮箱中发邮件(邮件内容是一个超链接)点击进行修改的功能,发送原理,我们只是把邮件发送给smtp服务器,然后再由smtp服务器发送到邮箱,发送之前要校验一下. 1.微软 ...