zoukankan      html  css  js  c++  java
  • delphi 用superobject解析json

    procedure Twmsbasreturndata.explainjson(strjson: string; detailename: string = ''; PlayVoice: Boolean = False);
    var
      jo: ISuperObject;
      tempresult: string;
    begin
      if trim(strjson) = '' then
      begin
        yundawms.pummessage.ShowMsgDlg('提交的的请求没有返回任何数据!', MB_OK);
        Presturnbool := false;
        exit;
      end;
    
      if trim(strjson) <> '' then
      begin
        jo := SO(strjson);
    
        if Assigned(jo['result']) then
        begin
          tempresult := jo['result'].AsString;
        end;
    
        PremarkTrue := '';
        if Assigned(jo['remark']) then    
        begin
          if Assigned(jo['remark']) then
            PremarkTrue := jo['remark'].AsString;
        end;
    
        if tempresult = 'TRUE' then // 请求成功,将json反序列化,映射到实体
        begin
          Presturnbool := true;
    
          jsondate := jo['data'];
          if Assigned(jsondate['onhsWithSameCarrier']) then   
            jsondate := jsondate['onhsWithSameCarrier'];
    
          if Assigned(jsondate['dptValue']) then  
          begin
            jsonDptValue := SO(jsondate['dptValue'].AsString);
    
            if Assigned(jsonDptValue['criteriaHead']) then  
              jsonCriteriaHeadValue := SO(jsonDptValue['criteriaHead'].AsString);
    
            if Assigned(jsonDptValue['groupSorts']) then  
              jsonGroupSortsValue := SO(jsonDptValue['groupSorts'].AsString);
          end;
    
          jo := jo['data'];
          if assigned(jo['cacheData']) then
            jsondateCache.Parse(jo['cacheData'].AsString);
    
          if Assigned(jo['currentPage']) then
          begin
            self.currentPage := inttostr(jo['currentPage'].AsInteger);
          end;
          if Assigned(jo['total']) then
          begin
            self.total := inttostr(jo['total'].AsInteger);
          end;
    
          if Assigned(jo['rows']) then
          begin
            jsonrows := jo['rows'];
            self.rows := jo['rows'].AsString;
          end;
    
          if Assigned(jo['nodes']) then
          begin
            jsonNodes := jo['nodes'];
          end;
          if Assigned(jo['pcmlRecordLs']) then
          begin
            jsonRecordLs := jo['pcmlRecordLs'];
            self.RecordLs := jo['pcmlRecordLs'].AsString;
          end;
          if Assigned(jo['pctRecord']) then
          begin
            jsonpctRecord := jo['pctRecord'];
          end;
          self.PackCaseNo := '';
          if Assigned(jo['pclPackCaseNo']) then
          begin
            jsonPackCaseNo := jo['pclPackCaseNo'];
            self.PackCaseNo := jo['pclPackCaseNo'].AsString;
          end;
          self.ExpressOrderNo := '';
          if Assigned(jo['pclExpressOrderNo']) then
          begin
            jsonExpressOrderNo := jo['pclExpressOrderNo'];
            self.ExpressOrderNo := jo['pclExpressOrderNo'].AsString;
          end;
          self.pclStatus := '';
          if Assigned(jo['pclStatus']) then
          begin
            jsonStatus := jo['pclStatus'];
            self.pclStatus := jo['pclStatus'].AsString;
          end;
    
          if detailename = '' then
          begin
            if Assigned(jo['details']) then
            begin
              jsondetails := jo['details'];
              self.details := jo['details'].AsString;
            end;
          end
          else
          begin
            if Assigned(jo[detailename]) then
            begin
              jsondetails := jo[detailename];
              self.details := jo[detailename].AsString;
            end;
          end;
    
          if Assigned(jo['picksbill']) then
          begin
            jsonpicksbill := jo['picksbill'];
            picksbill := jo['picksbill'].AsString;
          end;
    
          if Assigned(jo['pageSize']) then
          begin
            self.pageSize := inttostr(jo['pageSize'].AsInteger);
          end;
        end
        else if tempresult = 'FALSE' then // 请求失败,分析错误类型
        begin
          Presturnbool := false;
          if pos('errorCode', strjson) > 0 then
          begin
            errorCode := jo['errorCode'].AsString; { 需要区别不同的errorCode,区别对的 }
    
            if assigned(jo['remark']) then
              remarkerro := jo['remark'];
            addcodetoerrorCodelist(remarkerro);
    
          end;
        end;
      end;
    
      if tempresult = 'TRUE' then
      begin
        boolsucess := true
      end
      else
      begin
        boolsucess := false;
        if (errorCode <> 'B2B_GOON_OUTBOUND_WITH_LACK_CONFIRM_EXP') then
        begin
          if self.Fexceptionlist.Count > 0 then
          begin
            if PlayVoice then
              TWmsApplicationfunction.PlaywavBykeys('错误', 0); //播报语音
            PluginManager.AppService.MessageDialog.ShowMsgDlg(Fexceptionlist.Text, MB_OK);
          end;
        end;
      end;
    end;
  • 相关阅读:
    UVALive 7509 Dome and Steles
    HDU 5884 Sort
    Gym 101194H Great Cells
    HDU 5451 Best Solver
    HDU 5883 The Best Path
    HDU 5875 Function
    卡特兰数
    UVa 11729 Commando War 突击战
    UVa 11292 The Dragon of Loowater 勇者斗恶龙
    Spark Scala Flink版本对应关系
  • 原文地址:https://www.cnblogs.com/yangxuming/p/8086881.html
Copyright © 2011-2022 走看看