1. 程式人生 > >kbmmw 中JSON 操作入門

kbmmw 中JSON 操作入門

count 數組 代碼 click cli property -1 多條 from

現在各種系統中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 操作入門