现在各种系统中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. elasticsearch 不同集群数据同步

    采用快照方式 1.源集群采用NFS,注意权限 2.共享目录完成后,在所有ES服务器上挂载为同一目录 3.创建快照仓库 put _snapshot/my_backup{ "type" ...

  2. 复杂链表的复制(python)

    题目描述 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head.(注意,输出结果中请不要返回参数中的节点引用,否 ...

  3. 第二章 向量(d1)有序向量:唯一化

  4. DRF的权限和频率

    DRF的权限 权限组件源码 权限和频率以及版本认证都是在initial方法里初始化的 我们的权限类一定要有has_permission方法~否则就会抛出异常~~这也是框架给我提供的钩子~~ 在rest ...

  5. jakson

    Java下常见的Json类库有Gson.JSON-lib和Jackson等,Jackson相对来说比较高效,在项目中主要使用Jackson进行JSON和Java对象转换,下面给出一些Jackson的J ...

  6. 微信小程序开发——开发者工具无法输入中文的处理

    问题模块 框架类型 问题类型 操作系统 工具版本 开发者工具 小程序 Bug Windows v.02.1810290 异常描述: 无法输入中文,偶现,但是概率有点高,重启,重装,更新版本等等都未解决 ...

  7. [剑指Offer]22-链表中倒数第k个结点

    题目链接 https://www.nowcoder.com/practice/529d3ae5a407492994ad2a246518148a?tpId=13&tqId=11167&t ...

  8. IOS是否存在32位和64位版本的区分

    苹果于2013年9月推出了iPhone 5S新手机,采用的全新A7处理器其最大特色就是支持64位运算.其64位A7处理器的使用意味着iPhone性能会大有提高,性能和速度更加出色:而要到达到这样的性能 ...

  9. ajax添加header信息

    $.ajax({url:"xxx",async:true,dataType:"json",contentType:"application/json& ...

  10. python 网络下载的三种风格 未完成

    import osimport timeimport sys import requests#依序下载POP20_CC = ('CN IN US ID BR PK NG BD RU JP' 'MX P ...