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

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemhlbmdodWkx/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />

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

Delphi中Json格式读写的更多相关文章

  1. 关于http接口开发中json格式数据编码问题处理

    关于http接口开发中json格式数据编码问题处理 在实际工作中,接口很多时候返回json格式,但有时返回的格式会有编码问题 假设如下接口:http://service.test.com/interf ...

  2. python中json格式数据输出实现方式

    python中json格式数据输出实现方式 主要使用json模块,直接导入import json即可. 小例子如下: #coding=UTF-8 import json info={} info[&q ...

  3. Go net/http获取body中json格式数据

    Go net/http获取body中json格式数据 package main import ( "encoding/json" "fmt" "io/ ...

  4. Delphi中JSon SuperObject 使用:数据集与JSON对象互转

    在delphi中,数据集是最常用数据存取方式.因此,必须建立JSON与TDataSet之间的互转关系,实现数据之间通讯与转换.值得注意的是,这只是普通的TDataset与JSON之间转换,由于CDS包 ...

  5. ABAP 中JSON格式的转换与解析

    RT,JSON是当今十分流行的一种轻量数据格式,广泛地应用于各种数据交换场景中.本文会介绍一种比较简单的将ABAP中的数据转换为JSON格式的方法. (如果你是因为引号的问题搜索到了这篇文章,请直接拉 ...

  6. SpringMVC前后台数据传递中Json格式的相互转换(前台显示格式、Json-lib日期处理)及Spring中的WebDataBinder浅析

    两个方向: 一.前台至后台: Spring可以自动封装Bean,也就是说可以前台通过SpringMVC传递过来的属性值会自动对应到对象中的属性并封装成javaBean,但是只能是基本数据类型(int, ...

  7. jmeter 导入csv数据中json格式数据取值不完整

    1.jmeter中添加csv数据文件时,数据是json格式 2.jmeter中执行取值发现只取了一部分 分析原因,json格式数据,中间有逗号,而csv是根据逗号来分割的,这回导致我们取值错位. 解决 ...

  8. delphi 解析Json格式(转自:http://blog.csdn.net/jayqiang/article/details/7066824)

    SuperObject 是开源的 Delphi 的 JSON 工具包,可生成 JSON 数据以及进行 JSON 解析. unit Unit6; interface uses Windows, Mess ...

  9. 页面中 json 格式显示 数据

    在页面中,有时候我们需要的不仅仅是将数据显示出来,而且要以以 json 的格式显示数据,如显示接口的时候 我们需要如下显示 这个时候,主要用到了 <pre> 标签 $.get(" ...

随机推荐

  1. dns资源记录类型

    资源记录的定义格式: 语法:name [TTL] IN RR_TYPE value SOA: name:当前区域的名字,例如"magedu.com.",或者"2.168. ...

  2. VSTO:使用C#开发Excel、Word【6】

    Office主互操作程序集(PIA)在了解如何构建Office解决方案之前,您需要更详细地了解在.NET中与Office对象模型通信的托管程序集.用于与Office通话的托管程序集称为Office主互 ...

  3. Cracking The Coding Interview 4.4

    //Given a binary search tree, design an algorithm which creates a linked list of all the nodes at ea ...

  4. 1043 输出PATest

    给定一个长度不超过 10​4​​ 的.仅由英文字母构成的字符串.请将字符重新调整顺序,按 PATestPATest.... 这样的顺序输出,并忽略其它字符.当然,六种字符的个数不一定是一样多的,若某种 ...

  5. 100Mbps和100MB/s

    作为毕业2年计算机专业的学生,现在才知道100Mbps和100MB/s的概念,实在是渣. Mbps=Mbit/s即兆比特每秒.Million bits per second的缩写传输速率是指设备的的数 ...

  6. react 学习笔记 npm 命令

    第一步: cnpm install --save react react-dom babelify babel-preset-react 第二步: 安装es2015 cnpm install babe ...

  7. 爬虫系列4:scrapy技术进阶之多页面爬取

    多页面爬取有两种形式. 1)从某一个或者多个主页中获取多个子页面的url列表,parse()函数依次爬取列表中的各个子页面. 2)从递归爬取,这个相对简单.在scrapy中只要定义好初始页面以及爬虫规 ...

  8. 绕过Snoopy的记录功能

    不讲原理,感兴趣请看http://blog.rchapman.org/posts/Bypassing_snoopy_logging/,这个只适合老版本内核的Linux 查看是否有snoopy加载了 l ...

  9. OpenID 配置步骤

    允许客户端基于授权服务器执行的身份验证来验证最终用户的身份,以及以可互操作和类似REST的方式获取关于最终用户的基本配置文件信息. 创建一个MVC客户端 1.新建一个ASP.NET Core MVC应 ...

  10. MySQL内置功能

    视图 # 创建视图 create view course2teacher as select * from course inner join teacher on course.teacher_id ...