首页 > Windows开发 > 详细

Delphi中Json格式读写

时间:2019-04-22 20:29:41      阅读:468      评论:0      收藏:0      [点我收藏+]

Json是一种轻量级传输数据格式,广泛应用互联网和各应用中。json主要採用键值对来表示数据项。多个数据项之间用逗号分隔,也能够用于数组。以下注重介绍一下在delphi中使用json,在delphi中使用json经常使用superobject单元文件。该文件能够在网上下载,最初接触json是在2011年,好久没用这不刚好有项目要用到又折腾了好久,以下做了一个简单的Demo,方便以后忘了能随时查看。详细的json使用能够參看万一老师的博客,记录的非常详细,以下的demo主要是将数据库记录转换为json格式,然后进行解析。详细源代码例如以下。

新建一个delphi应用程序,在窗口上放置table组件,连接数据DBDEMOS。连接表customer.db,active设置为true。

详细文件例如以下:

delphiproject文件例如以下

program Project1;


uses
? Forms,
? Unit1 in ‘Unit1.pas‘ {Form1};


{$R *.res}


begin
? Application.Initialize;
? Application.CreateForm(TForm1, Form1);
? Application.Run;
end.

单元文件例如以下:

unit Unit1;


interface


uses
? Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
? Dialogs, StdCtrls, Grids, DBGrids, DB, DBTables;


type
? TForm1 = class(TForm)
? ? mmo1: TMemo;
? ? tbl1: TTable;
? ? ds1: TDataSource;
? ? btn1: TButton;
? ? btn2: TButton;
? ? btn3: TButton;
? ? procedure btn1Click(Sender: TObject);
? ? procedure btn2Click(Sender: TObject);
? ? procedure btn3Click(Sender: TObject);
? private
? ? { Private declarations }
? public
? ? { Public declarations }
? end;


var
? Form1: TForm1;


implementation


{$R *.dfm}


uses ?superobject;


procedure TForm1.btn1Click(Sender: TObject);
var
? jo,jt:ISuperObject;
begin
? jo:=SO();
? jt:=SO();
? jo.S[‘xm‘]:=‘张三‘;
? jo.I[‘age‘]:=25;
? jo.S[‘sex‘]:=‘男‘;
? jt.O[‘person‘]:=jo;
? ShowMessage(jt.AsString);
? ShowMessage(jt.O[‘person‘].S[‘xm‘]);
end;

procedure TForm1.btn2Click(Sender: TObject);
var
? i:Integer;
? jfields,jitems,jo:ISuperObject;
begin
? mmo1.Clear;
? jitems:=SA([]);
? jo:=SO();
? with tbl1 do
? begin
? ? First;
? ? while not eof do
? ? begin

? ? ??jfields:=SO();
? ? ? for i:=0 to FieldCount-1 do
? ? ? begin
? ? ? ? if Fields[i].DataType=ftDateTime then
? ? ? ? ?jfields.S[Fields[i].FieldName]:=FormatDateTime(‘yyyy-mm-dd hh:mm:ss‘,Fields[i].AsDateTime)
? ? ? ? else
? ? ? ? ?jfields.S[Fields[i].FieldName]:=Fields[i].AsString;
? ? ? end;
? ? ? jitems.AsArray.Add(jfields);
? ? ? Next;
? ? end;
? end;
? jo.O[‘records‘]:=jitems;
? mmo1.Lines.Add(jo.AsString);
end;




procedure TForm1.btn3Click(Sender: TObject);
var
? jo,m:ISuperobject;
? i,j:Integer;
? tt:TSuperArray;
? s:string;
? lst:TStringList;
begin
? if mmo1.Text<>‘‘ then
? begin
? ? lst:=TStringList.Create;
? ? jo:=so(mmo1.Text);
? ? tt:=jo.O[‘records‘].AsArray;
? ? for i:=0 to tt.Length-1 do
? ? begin
? ? ? s:=‘‘;
? ? ? for j:=0 to tbl1.FieldCount-1 do
? ? ? begin
? ? ? ?if s=‘‘ then
? ? ? ? s:=tt.O[i].S[tbl1.Fields[j].FieldName]
? ? ? ?else
? ? ? ? s:=s+‘ ‘+tt.O[i].S[tbl1.Fields[j].FieldName]
? ? ? end;
? ? ? lst.Add(s);
? ? end;
? ? ShowMessage(lst.Text) ;
? ? lst.Free;
? end;
end;


end.


dfm文件例如以下:

object Form1: TForm1
? Left = 312
? Top = 70
? Width = 410
? Height = 382
? Caption = ‘json读写‘
? Color = clBtnFace
? Font.Charset = DEFAULT_CHARSET
? Font.Color = clWindowText
? Font.Height = -11
? Font.Name = ‘MS Sans Serif‘
? Font.Style = []
? OldCreateOrder = False
? PixelsPerInch = 96
? TextHeight = 13
? object mmo1: TMemo
? ? Left = 0
? ? Top = 0
? ? Width = 394
? ? Height = 249
? ? Align = alTop
? ? TabOrder = 0
? end
? object btn1: TButton
? ? Left = 23
? ? Top = 264
? ? Width = 75
? ? Height = 25
? ? Caption = ‘简单读写‘
? ? TabOrder = 1
? ? OnClick = btn1Click
? end
? object btn2: TButton
? ? Left = 121
? ? Top = 264
? ? Width = 105
? ? Height = 25
? ? Caption = ‘读数据库记录‘
? ? TabOrder = 2
? ? OnClick = btn2Click
? end
? object btn3: TButton
? ? Left = 253
? ? Top = 263
? ? Width = 75
? ? Height = 25
? ? Caption = ‘解析json‘
? ? TabOrder = 3
? ? OnClick = btn3Click
? end
? object tbl1: TTable
? ? Active = True
? ? DatabaseName = ‘DBDEMOS‘
? ? TableName = ‘customer.db‘
? ? Left = 288
? ? Top = 152
? end
? object ds1: TDataSource
? ? DataSet = tbl1
? ? Left = 104
? ? Top = 176
? end
end


当中有些版本号superobject的hash方法有编译指令,我使用时报错,将其去掉改为例如以下:

class function TSuperAvlEntry.Hash(const k: SOString): Cardinal;
var
? h: cardinal;
? i: Integer;
begin
? h := 0;
? for i := 1 to Length(k) do
? ? h := h*129 + ord(k[i]) + $9e370001;
? Result := h;
end;


程序执行结果例如以下:

技术分享图片

点击简单读写

技术分享图片

技术分享图片

读数据库记录

技术分享图片

解析json技术分享图片

superobject单元还提供了很多方法,在此不一一列举使用,以后使用中再慢慢总结。

Delphi中Json格式读写

原文:https://www.cnblogs.com/xfgnongmin/p/10751997.html

(0)
(0)
   
举报
评论 一句话评论(0
分享档案
最新文章
教程昨日排行
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!