zoukankan      html  css  js  c++  java
  • 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 实现无缝互转。

  • 相关阅读:
    责任
    人生
    有感
    冲突无处不在
    中科院玉泉路攻略——吃篇(校外)
    兄弟
    (18)[转载]:跳台阶问题
    Excel表格加下列选择框
    (转载)(c#)数据结构与算法分析 数组、向量和表
    [转载] 趣味算法:字符串反转的N种方法
  • 原文地址:https://www.cnblogs.com/xalion/p/7100177.html
Copyright © 2011-2022 走看看