delphi 原生支持 json,不使用第三方单元,在xe6中测试通过

使用泛型支持直接将json字符串转换为自定义的类;

unit Form_Main;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, System.JSON, REST.JSON, REST.JsonReflect, StdCtrls,
  System.Generics.Collections;

type
  TFormMain = class(TForm)
    btnString: TButton;
    Memo: TMemo;
    btnPair: TButton;
    btnObject: TButton;
    btnArray: TButton;
    btn1: TButton;
    btn2: TButton;
    procedure btnStringClick(Sender: TObject);
    procedure btnPairClick(Sender: TObject);
    procedure btnObjectClick(Sender: TObject);
    procedure btnArrayClick(Sender: TObject);
    procedure btn1Click(Sender: TObject);
    procedure btn2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

  TMyJsonDataClass = class
  private
    FName1: string;
    procedure SetName1(const Value: string);
  public
    property Name1: string read FName1 write SetName1;
  end;

var
  FormMain: TFormMain;

implementation

{$R *.dfm}

procedure TFormMain.btn1Click(Sender: TObject);
var
  vMyObj: TMyJsonDataClass;
begin
  vMyObj := TMyJsonDataClass.Create;
  vMyObj.Name1 := '钱锋';
  Memo.Lines.Add(TJson.ObjectToJsonString(vMyObj));
  vMyObj.Free;
end;

procedure TFormMain.btn2Click(Sender: TObject);
var
  vMyObj: TMyJsonDataClass;
begin
  // {"name1":"\u94B1\u950B"}
  vMyObj := TJson.JsonToObject<TMyJsonDataClass>('{"name1":"\u94B1\u950B"}');
  ShowMessage(vMyObj.Name1);
  vMyObj.Free;
end;

procedure TFormMain.btnArrayClick(Sender: TObject);
var
  JA: TJSONArray;
  JO: TJSONObject;
  JP: TJSONPair;
  JN: TJSONNumber;
  JNull: TJSONNull;
begin
  JO := TJSONObject.Create;
  JP := TJSONPair.Create('时间', DateTimeToStr(Now));
  JO.AddPair(JP);
  JN := TJSONNumber.Create(12.3433);
  JO.AddPair(TJSONPair.Create('价格', JN));
  JNull := TJSONNull.Create;
  JO.AddPair('空的', JNull);
  //
  JA := TJSONArray.Create;
  JA.AddElement(JO);
  JA.AddElement(JN);
  JA.AddElement(JNull);
  JA.AddElement(TJSONTrue.Create);
  JA.AddElement(TJSONFalse.Create);
  //
  Memo.Lines.Add(JA.ToString);
  Memo.Lines.Add('');
end;

procedure TFormMain.btnObjectClick(Sender: TObject);
var
  JO: TJSONObject;
  JP: TJSONPair;
  JN: TJSONNumber;
  JNull: TJSONNull;
begin
  JO := TJSONObject.Create;
  JP := TJSONPair.Create('时间', DateTimeToStr(Now));
  JO.AddPair(JP);
  JN := TJSONNumber.Create(12.3433);
  JO.AddPair(TJSONPair.Create('价格', JN));
  JNull := TJSONNull.Create;
  JO.AddPair('空的', JNull);
  //
  Memo.Lines.Add(JO.ToString);
  Memo.Lines.Add('');
end;

procedure TFormMain.btnPairClick(Sender: TObject);
var
  JP: TJSONPair;
  JN: TJSONNumber;
begin
  JP := TJSONPair.Create('类型', 'JSON Pair');
  Memo.Lines.Add(JP.ToString);
  Memo.Lines.Add('');
  JN := TJSONNumber.Create(pi);
  JP := TJSONPair.Create('类型', JN);
  Memo.Lines.Add(JP.ToString);
  Memo.Lines.Add('');
end;

procedure TFormMain.btnStringClick(Sender: TObject);
var
  JS: TJSONString;
begin
  JS := TJSONString.Create('这是一个JSON String!');
  Memo.Lines.Add(JS.ToString);
  Memo.Lines.Add('');
end;

{ TMyJsonDataClass }

procedure TMyJsonDataClass.SetName1(const Value: string);
begin
  FName1 := Value;
end;

end.

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值