使用superobject 解析Json数据

接口数据有如下规范{"error": 0, "msg": "", "data": ...}

其中数据data类型不确定。发生错误时,返回错误代码error与提示msg,反之error为0,msg为""。

function GetResultData(const AStr: string; var AData: string): Boolean;
var
  vJ: ISuperObject;
begin
  vJ := SO(AStr);
  Result := vJ.I['error'] = 0;
  if Result then
    AData := vJ['data'].AsString
  else
    AData := Format('错误代码[%d]: %s', [vJ.I['error'], vJ.S['msg']]);
end;

1. 解析Json数据为{"error": 0, "msg": "", "data": {"name":"张三","age": 17}}

procedure GetPersonInfo(const AStr: string);
var
  sInfo: string;
  vPerson: ISuperObject;
begin
  if GetResultData(AStr, sInfo) then
  begin
    vPerson := SO(sInfo);
    ShowMessage(Format('姓名:%s,年龄:%d', [vPerson.S['name'], vPerson.I['age']]));
  end
  else
     MessageBox(0, PChar(sInfo), PChar('警告'), MB_OK or MB_ICONWARNING);
end;

2. 解析Json数据为{"error": 0, "msg": "", "data": [{"name":"张三","age": 17},{"name":"李四","age":20}]}

procedure GetPersonsInfo(const AStr: string);
var
  sInfo: string;
  vPersons, vPerson: ISuperObject;
  i: Integer;
  sgs: TStrings;
begin
  if GetResultData(AStr, sInfo) then
  begin
    vPersons := SO(sInfo);
    sgs := TStringList.Create;
    for i := 0 to vPerson.AsArray.length - 1 do
    begin
      vPerson := vPerson.AsArray.O[i];
      sgs.Add(Format('姓名:%s,年龄:%d', [vPerson.S['name'], vPerson.I['age']]));
    end;
    ShowMessage(sgs.Text);
    sgs.Free;
  end
  else
    MessageBox(0, PChar(sInfo), PChar('警告'), MB_OK or MB_ICONWARING);
end;

 

转载于:https://www.cnblogs.com/CinYung/p/8126369.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值