kbmmw 中JSON 操作入门

Posted Delphi 窑洞

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了kbmmw 中JSON 操作入门相关的知识,希望对你有一定的参考价值。

现在各种系统中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\']:=1;
   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 :=1 to 10 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[5].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[5].AsString[\'name\'] );

    memo2.lines.Add(\'数组大小:\'+jresult.Count.ToString  );
    memo2.lines.Add(\'属性个数:\'+jresult.AsObject[5].PropertyCount.ToString  );

    for I := 1 to jresult.AsObject[5].PropertyCount do

          memo2.lines.Add(\'属性\'+i.ToString+\'名:\'+jresult.AsObject[5].PropertyName[i-1]);


    alljson.Free;
    myjson.Free;

end;

运行结果

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

 

以上是关于kbmmw 中JSON 操作入门的主要内容,如果未能解决你的问题,请参考以下文章

kbmmw 中虚拟文件操作入门

kbmmw 中JSON 中使用SQL 查询

kbmmw 与extjs 通过JSON Base64 显示图片

kbmmw 中的进程管理小工具

kbmmw 中的日期时间操作

初始kbmmw 中的ORM