现在各种系统中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. mysql 5.7 基于GTID 主从同步的1236故障处理(其它事务故障等同)

    登录从库 stop slave; 查看执行事务 show slave status\G Retrieved_Gtid_Set:  Executed_Gtid_Set: ee3bdb44-f6a1-11 ...

  2. Zabbix3.2下Template App Zabbix Server+Template OS Linux Item

    序号 Name Key 返回值 释义1 Agent ping agent.ping 1 就是ping一下2 Avaliable memory vm.memory.size[available] 563 ...

  3. git和svn的对比

  4. CTF题-http://120.24.86.145:8002/flagphp/:Bugku----flag.php

    今天做了一道关于序列化的题目,收益颇多,愉快地开始. 首先,提示了“hint”,所以尝试加入hint参数.这儿没啥好说的,最后hint=1显示了重点内容.如下图所示 没错,是金灿灿的网页代码,开心,仔 ...

  5. css3动画:执行前不显示,执行后显示

    今天做一个轮播,轮播图上使用animation.需求是当滚动到当前图片时,图片中的div从无到有逐渐显示, 遇到的问题是:页面刷新时,此图片上的div可以从无到有,但第二次滚动到此图片时,总是先显示一 ...

  6. ubuntu系列-安装jdk以及eclipse(for C++)

    1.安装jdk eclipse是使用java语言开发的,一个java应用程序的运行要在java虚拟机下.在没有安装jdk的前提下,即使在ubuntu上安装了eclipse也不能使用. (1)首先在官网 ...

  7. Django的auth【认证】模块简介

    首先我们先来复习一下路由别名如何使用,这里仅仅复习一下二级路由的路由别名该如何使用 ·1.在视图函数中使用二级路由别名,需要加上app的名称+“:”+ “路由别名” from django.urls ...

  8. Redis 与Spring-data-redis 整合后封装的工具类

    此工具类方法是使用了redis 与spring 整合后,才可以使用的工具类,将 spring-data-redis 一些我们开发中常用的方法进行了封装,方便我们日常开发中进行调用: package c ...

  9. Hibernate+struct web项目问题总结

    问题一: ClassTable is not mapped [from ClassTable] 解决办法:在添加资源路径 <mapping resource="***/***/***/ ...

  10. 我的第一个博客——Fragment遇到的问题

    最近项目中使用fragment时遇到了一些问题: 1.fragment的刷新问题. 解决:我的情况是有多个fragment时,只需要刷新其中几个界面.之前我在网上看到的一些方法.如下: 首先在Adap ...