Delphi XE7中使用JSON

原创 2014年11月23日 09:41:17

Delphi XE7有一个对JSON处理的单元,在你需要使用JSON的单元里面引入"System.json",随后你就可以用Delphi自己的json处理类了。我写的小例子只是对包含字符串和数组的JSON进行解析,这两种数据类型,我觉得是实际使用中最常用、有用的类型,所以我仅仅用这两种例子做演示!

演示代码:

{
  功能:DelphiXE7中使用JSON
  ------------------------------------------------------------------------------
  说明:
  1,使用Delphi自己带的JSON(system.json)。
  2,这仅仅是一个简单例子,以后还会增加演示功能。
  ------------------------------------------------------------------------------
  注意:
  1,JSON类创建后,里面所有元素不用管释放,JSON类自己管理,千万不要画蛇添足啊!!!!!!
  ------------------------------------------------------------------------------
  作者:孙玉良 QQ:14667479 Email:sunylat@163.com  修改时间:2014/11/23 00:13
  ------------------------------------------------------------------------------
  开发工具:Delphi XE7
  测试手机:华为荣耀X1
}
unit Unit1;


interface


uses
  System.SysUtils, System.Types, System.UITypes, System.Classes,
  System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.StdCtrls,
  FMX.Layouts, FMX.Memo;


type
  TForm1 = class(TForm)
    Panel1: TPanel;
    Memo1: TMemo;
    Panel2: TPanel;
    Button1: TButton;
    Button2: TButton;
    Memo2: TMemo;
    Button3: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure FormResize(Sender: TObject);
  private
    { Private declarations }


    // 重新设置button按钮
    procedure ResetButton;
  public
    { Public declarations }
  end;


var
  Form1: TForm1;


const
  // 演示用的JSON
  jsonString = '{"name":"张三", "other":["中国","程序员"]}';


implementation


{$R *.fmx}


uses
  System.json; // Dephi自带的JSON单元


procedure TForm1.Button1Click(Sender: TObject);
var
  JSONObject: TJSONObject; // JSON类
  i: Integer; // 循环变量
  temp: string; // 临时使用变量
  jsonArray: TJSONArray; // JSON数组变量
begin


  if Trim(Memo1.Text) = '' then
  begin
    ShowMessage('要解析数据不能为空!');
  end
  else
  begin
    JSONObject := nil;
    try
      { 从字符串生成JSON }
      JSONObject := TJSONObject.ParseJSONValue(Trim(Memo1.Text)) as TJSONObject;


      if JSONObject.Count > 0 then
      begin


        { 1,遍历JSON数据 }
        Memo2.Lines.Add('遍历JSON数据:' + #13#10);


        Memo2.Lines.Add('JSON数据数量:' + IntToStr(JSONObject.Count));


        for i := 0 to JSONObject.Count - 1 do
        begin


          if i = 0 then
          begin
            temp := JSONObject.Get(i).ToString + #13#10;;
          end
          else
          begin
            temp := temp + JSONObject.Get(i).ToString + #13#10;
          end;


        end;


        { output the JSON to console as String }
        Memo2.Lines.Add(temp);


        Memo2.Lines.Add('------------------------------');


        { 2,按元素解析JSON数据 }
        Memo2.Lines.Add('按元素解析JSON数据:' + #13#10);
        temp := 'name = ' + JSONObject.Values['name'].ToString + #13#10;
        Memo2.Lines.Add(temp);


        // json数组
        jsonArray := TJSONArray(JSONObject.GetValue('other'));;
        if jsonArray.Count > 0 then
        begin


          // 得到JSON数组字符串
          temp := 'other = ' + JSONObject.GetValue('other').ToString + #13#10;


          // 循环取得JSON数组中每个元素
          for i := 0 to jsonArray.Size - 1 do
          begin
            temp := temp + IntToStr(i + 1) + ' : ' + jsonArray.Items[i]
              .Value + #13#10;
          end;


        end;


        Memo2.Lines.Add(temp);


      end
      else
      begin
        temp := '没有数据!';
        Memo2.Lines.Add(temp);
      end;


    finally
      JSONObject.Free;
    end;
  end;


end;


// 清空显示数据
procedure TForm1.Button2Click(Sender: TObject);
begin
  Memo1.Text := '';
  Memo2.Text := '';
end;


// 设置要解析的JSON数据
procedure TForm1.Button3Click(Sender: TObject);
begin
  Memo1.Text := jsonString;
end;


// 设置要解析的JSON数据
procedure TForm1.FormCreate(Sender: TObject);
begin
  Memo1.Text := jsonString;
end;


procedure TForm1.FormResize(Sender: TObject);
begin
  // 重新设置button按钮
  self.ResetButton;
end;


// 重新设置button按钮
procedure TForm1.ResetButton;
var
  buttonWidth: Integer;
begin
  buttonWidth := self.Width div 3;


  Button1.Width := buttonWidth;
  Button2.Width := buttonWidth;
  Button3.Width := buttonWidth;
end;


end.


源代码下载:http://dl5.csdn.net/fd.php?i=942981887415230&s=8613165e1e05b7e0f273b3a4729e2d0b

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sunylat/article/details/41407945

Delphi xe10对json的解析应用

Json语句 {"code":100,"state":"true","data":["hero","npc","pet"]} 引用单元 System.JSON类型说明 //申明变量 Ro...
  • yoie01
  • yoie01
  • 2016-08-15 21:30:00
  • 5745

Delphi XE6 原生解析json

Delphi XE5带了system.json单元,原生提供了json支持类。下面是解析json用法说明: 最简单的JSON大致像这样 { "date":"周二(今天,...
  • gzxiaorou
  • gzxiaorou
  • 2015-03-22 15:49:03
  • 5075

Delphi XE10,Json 生成和解析,再利用indyhttp控件Post

Delphi XE10,Json 生成和解析,再利用indyhttp控件Post
  • gjtao1130
  • gjtao1130
  • 2017-09-20 18:30:23
  • 1492

delphi xe 解析复杂json

最简单的JSON大致像这样 { "date":"周二(今天, 实时:12℃)", "dayPictureUrl":"http://api.map.baidu....
  • wnjnfn
  • wnjnfn
  • 2017-04-11 17:18:45
  • 961

Delphi XE 3 处理JSON对象的基本功能示例

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScript Programming Langu...
  • MaxWoods
  • MaxWoods
  • 2012-12-07 00:07:49
  • 5083

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

unit Form_Main; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Control...
  • martinloyee
  • martinloyee
  • 2014-09-30 17:48:28
  • 2916

通过Json数据格式进行Http服务交互(Delphi)

  • 2014年10月29日 11:16
  • 323KB
  • 下载

TJSONObject 一个完整的json文件的解析

  • 2017年05月26日 21:43
  • 2.35MB
  • 下载

json字符串转换为JSONObject和JSONArray

一.下载json 具体到http://www.json.org/上找java-json下载,并把其放到项目源代码中,这样就可以引用其类对象了 二.具体转化过程 //JSONObject  Str...
  • taxiangwuhen
  • taxiangwuhen
  • 2012-08-10 00:36:30
  • 270323

delphi的TJSONArray出错:undeclare identify 'TJSONArray'...

很简单,找了很久,这边记录一下在uses处申明一下,就可以用TJSONArray了 uses System.SysUtils, System.Classes, Datasnap.DSServer, ...
  • gxxloveszj
  • gxxloveszj
  • 2013-06-28 15:58:51
  • 2349
收藏助手
不良信息举报
您举报文章:Delphi XE7中使用JSON
举报原因:
原因补充:

(最多只允许输入30个字)