设为首页 加入收藏

TOP

Delphi解析修改Json文件,基于superobject.pas(ISuperObject)(一)
2019-08-23 00:30:30 】 浏览:116
Tags:Delphi 解析 修改 Json 文件 基于 superobject.pas ISuperObject

在经过一系列的波折后,还是觉得delphi读取并修改json文件来的方便;

在网络上找到一个delphi的三方库ISuperObject,添加到项目后直接引用就行;

下载地址

ISuperObject中几个常用的函数:

  • function SO(const s: SOString = ‘{}’): ISuperObject; overload; 此函数传入json数据字符串,并返回一个ISuperObject对象,这一般是我们解析json时使用的第一个函数,如jObj := SO(jsonstr)。
  • property O[const path: SOString]: ISuperObject read GetO write PutO; default; 如:jobj.O[‘username’],此函数被一个ISuperObject对象调用,方括号内的字符串为json中的字段名称,返回一个ISuperObject对象。
  • property S[const path: SOString]: SOString read GetS write PutS; 此函数被一个ISuperObject对象调用,和O[‘username’]不同的是,它返回的是一个SoString,即一个字符串,使用方法 str := jObj.S[‘username’]; 同理的还有其他几个类似的函数,如I[‘age’]返回整数,B[‘isenable’]返回布尔型,A[‘users’]返回一个TSuperArray数组
  • AsString, AsBoolean, AsInteger,AsArray,ISuperObject的函数,用来把ISuperObject转换成相应的数据类型。

演示代码:

 

//读取json文件
procedure TForm2.Button1Click(Sender: TObject);
var
  rText: TextFile;
  tmp: UTF8String;
begin
  AssignFile(rText, 'C:\Users\admin\Desktop\F.txt');
  reset(rText);
  while not EOF(rText) do
  begin
    readln(rText, tmp);
    Res := Res + tmp;
  end;
  closefile(rText);
  Memo1.Lines.Add(Res);
  application.MessageBox('加载成功!', '提示', MB_OK);
end;
//处理JSON字符串,按照固定结构读取
procedure TForm2.Button2Click(Sender: TObject);
var
  jRet, jUsers: ISuperObject;
  aryUsers: TSuperArray;
  gridStartTime, gridEndTime, resultStartTime, resultEndTime, WindSpeedBorder,
    WindDirectBorder: string;
  po, pof, poh, posp: Tpoint;
  num, count, I, J: integer;
  aryers, arrline, arrbar, arrspeed: TSuperArray;
  Tlist: TStringlist;
begin
  jRet:=TSuperObject.Create(stObject);
  Tlist := TStringlist.Create;
  Tlist.Delimiter := ',';
  jRet := SO(Res);
  gridStartTime := jRet.O['gridStartTime'].AsString();
  Memo1.Lines.Add(gridStartTime);
  gridEndTime := jRet.O['gridEndTime'].AsString();
  Memo1.Lines.Add(gridEndTime);
  resultStartTime := jRet.O['resultStartTime'].AsString();
  Memo1.Lines.Add(resultStartTime);
  resultEndTime := jRet.O['resultEndTime'].AsString();
  Memo1.Lines.Add(resultEndTime);
  WindSpeedBorder := jRet.O['WindSpeedBorder'].AsString();
  Memo1.Lines.Add(WindSpeedBorder);
  WindDirectBorder := jRet.O['WindDirectBorder'].AsString();
  Memo1.Lines.Add(WindDirectBorder);

  aryers := jRet.O['WindDirectLine'].O['coordinates'].AsArray();
  count := aryers.Length;
  for I := 0 to count - 1 do
  begin
    arrline := aryers[I].O['mWindDirectBaseLine'].AsArray();
    for J := 0 to arrline.Length - 1 do
    begin
      // Tlist.DelimitedText := arrline[J].O['p'].AsString();
      // po:=point(strtoint(Tlist[0]),strtoint(Tlist[1]));
      Memo1.Lines.Add(arrline[J].O['p'].AsString());
    end;
    arrbar := aryers[I].O['mWindDirectBars'].AsArray();
    for J := 0 to arrbar.Length - 1 do
    begin
      // Tlist.DelimitedText := arrbar[J].O['f'].O['p'].AsString();
      // pof:=point(strtoint(Tlist[0]),strtoint(Tlist[1]));
      // Tlist.DelimitedText := arrbar[J].O['h'].O['p'].AsString();
      // poh:=point(strtoint(Tlist[0]),strtoint(Tlist[1]));
      Memo1.Lines.Add('f: ' + arrbar[J].O['f'].O['p'].AsString()
          + ' h: ' + arrbar[J].O['h'].O['p'].AsString());
    end;
  end;

  aryers := jRet.O['WindSpeedLine'].O['coordinates'].AsArray();
  count := aryers.Length;
  for I := 0 to count - 1 do
  begin
    arrspeed := aryers[I].AsArray();
首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇TClientDataSet 提交时提示 Field.. 下一篇delphi使用Foxit Quick PDF Libra..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目