DELPHI XE10,JSON 生成和解析,再利用INDYHTTP控件POST

DELPHI XE10,JSON 生成和解析,再利用INDYHTTP控件POST,第1张

概述Delphi XE10,Json 生成解析,再利用indyhttp控件Post2017年09月20日 18:30:23阅读数:1973--不多说,直接上代码procedure TFrmMain.Brand;var JSONObject, jsonparam: TJSONObject; // JSON类 jsonArray: TJSONArray; // JSON数
Delphi XE10,Json 生成和解析,再利用indyhttp控件Post2017年09月20日 18:30:23阅读数:1973--不多说,直接上代码procedure TFrmMain.Brand;var  JsONObject,Jsonparam: TJsONObject; // JsON类  JsonArray: TJsONArray; // JsON数组变量  i: Integer;  Flag_Do: Boolean;  JsonToSend: TStringStream;  JsonStr,rjsonStr: string;  rjsonObject,rjsondata,rjsonListObjItem: TJsONObject; // JsON类  rjsonArray: TJsONArray; // JsON数组变量  InfoCount: Integer;  TMPStr,TMPItemValue: string;  SbrandID: Double;  SbrandCode,Schinesename,Senglishname,SlogoUrl,Sintroduction: string;  InfoCode,InfoMsg: string;begin  Flag_Do := True;  URL := http://devhhplus.oudianyun.com:2035/open-API/product-web/brand/getBrand.do;  try    while Flag_Do do    begin      JsONObject := TJsONObject.Create;      Jsonparam := TJsONObject.Create;      JsonArray := TJsONArray.Create;      with DmMain.ADOquery1 do      begin        Close;        Parameters.Clear;        sql.Clear;        //sql.Add(‘{call pkg_SynZhongTai.sp_GetBrand(?)}‘);        sql.Add({call pkg_SynZhongTai.sp_GetBrand});        Open;        if RecordCount = 0 then        begin          Flag_Do := False;          Break;        end;        First;        while not Eof do        begin          JsonArray.Add(FIEldByname(BrandID).Asstring);          JsONObject.AddPair(brandID,JsonArray);          JsONObject.AddPair(brandname,FIEldByname(Brandname).Asstring);          Next;        end;      end;      Jsonparam.AddPair(app_ID,app_ID);      Jsonparam.AddPair(v,1.0);      Jsonparam.AddPair(JsonData,JsONObject);      Jsonparam.AddPair(sign,getSign(Jsonparam));      JsonStr := getFormData(Jsonparam);      rjsonStr := SendPost(URL,JsonStr);      rjsonObject := TJsONObject.ParseJsONValue(rjsonStr) as TJsONObject;      rjsondata := TJsONObject.ParseJsONValue(Trim(rjsonObject.GetValue(data).ToString)) as TJsONObject;      InfoCount := StrToInt(rjsondata.GetValue(total).ToString);      InfoCode := rjsonObject.GetValue(code).ToString;      rjsonObject.TryGetValue(msg,InfoMsg);      rjsonArray := TJsONArray(rjsondata.GetValue(ListObj));      for i := 0 to rjsonArray.Size - 1 do      begin        rjsonListObjItem := TJsONObject.ParseJsONValue(rjsonArray.items[i].ToString) as TJsONObject;    //    Memo2.lines.Add(‘brandID:‘ + rjsonListObjItem.GetValue(‘brandID‘).ToString);        if rjsonListObjItem.TryGetValue(brandID,TMPItemValue) then          SbrandID := StrTofloat(TMPItemValue);        if rjsonListObjItem.TryGetValue(brandCode,TMPItemValue) then          SbrandCode := TMPItemValue;        if rjsonListObjItem.TryGetValue(chinesename,TMPItemValue) then          Schinesename := TMPItemValue;        if rjsonListObjItem.TryGetValue(englishname,TMPItemValue) then          Senglishname := TMPItemValue;        if rjsonListObjItem.TryGetValue(logoUrl,TMPItemValue) then          SlogoUrl := TMPItemValue;        if rjsonListObjItem.TryGetValue(introduction,TMPItemValue) then          Sintroduction := TMPItemValue;        with DmMain.ADOStoredProc1 do        begin          Close;          Parameters.Clear;          Procedurename := pkg_SynZhongTai.sp_SynZTBranDWeb;          Parameters.CreateParameter(vbrandIDweb,ftfloat,pdinput,100,SbrandID);          Parameters.CreateParameter(vbrandCode,ftString,SbrandCode);          Parameters.CreateParameter(vchinesename,Schinesename);          Parameters.CreateParameter(venglishname,Senglishname);          Parameters.CreateParameter(vlogoUrl,SlogoUrl);          Parameters.CreateParameter(vintroduction,Sintroduction);          ExecProc;        end;      end;      LogWrite(code: + InfoCode + 。msg: + InfoMsg);      JsONObject := nil;      Jsonparam := nil;      JsonArray := nil;      rjsonObject := nil;      rjsondata := nil;      rjsonListObjItem := nil;      rjsonArray := nil;    end;  finally  end;end;function TFrmMain.SendPost(AURL,AJsonStr: string): string;var  JsonToSend: TStringStream;  TMPResult: string;begin  try    try      // 以列表的方式提交参数      IDhttp.HandleRedirects := True; // 允许头转向      IDhttp.ReadTimeout := 5000; // 请求超时设置      IDhttp.Request.ContentType := application/x-www-form-urlencoded; //‘application/Json‘; // 设置内容类型为Json      Memo1.Clear;      Memo1.Text := AJsonStr;      JsonToSend := TStringStream.Create(AJsonStr,TEnCoding.UTF8);      JsonToSend.position := 0; // 将流位置置为0      // IDhttp.Post(Url,JsonToSend,ResponseStream);      TMPResult := IDhttp.Post(AURL,JsonToSend);    except      on e: Exception do      begin        ShowMessage(e.Message);      end;    end;  finally    LogWrite(TMPResult);    Result := TMPResult;  end;end;function getSign(params: TJsONObject): string;var  arrString,arrString1: array of string;  len,i: Integer;  s1: TStringList;  TMPStr,TMPValue,TMP1,TMPMD5: string;  md5: THashMD5;begin  params.RemovePair(sign);  len := params.Count;  SetLength(arrString,len);  SetLength(arrString1,len);  for i := 0 to len - 1 do  begin    // arrString[i] := params.Get(i).ToString;    //arrString[i] := params.Pairs[i].JsonString.ToString;    arrString[i] := StringReplace(params.Pairs[i].JsonString.ToString,",‘‘,[rfReplaceAll]);    //ShowMessage(arrString[i]);  end;  // ItemArry:= params.GetValue(‘JsonData‘) as TJsONArray;  s1 := TStringList.Create;  for i := 0 to length(arrString) - 1 do  begin    s1.Add(arrString[i]);  end;  s1.sort;  for i := 0 to s1.Count - 1 do  begin    arrString1[i] := s1.Strings[i];  end;  TMPStr := TMPStr + app_secret;  for i := 0 to len - 1 do  begin    // TMPValue := params.GetValue(arrString1[i]).ToString;    // ShowMessage(arrString1[i]);    // ShowMessage(StringReplace(arrString1[i],‘"‘,‘‘‘‘,[rfReplaceAll]));    TMP1 := StringReplace(arrString1[i],[rfReplaceAll]);    // ShowMessage(TMP1);    // ShowMessage(params.ToString);    // ShowMessage(params.Values[‘JsonData‘].ToString);    TMPValue := params.Values[TMP1].ToString;    if arrString1[i] <> JsonData then    begin      TMPValue := StringReplace(TMPValue,[rfReplaceAll]);    end;    if TMPValue <> ‘‘ then    begin      TMPStr := TMPStr + arrString1[i] + TMPValue;    end;  end;  TMPStr := TMPStr + app_secret;  //Application.MessageBox(PChar(TMPStr),‘加密前‘,mrOk);  TMPMD5 := UpperCase(md5.GetHashString(TMPStr));  Result := TMPMD5;end;function getFormData(params: TJsONObject): string;var  arrString,arrString1: array of string;  // ItemArry:TJsONArray;  len,formData,TMP1: string;  md5: THashMD5;begin  len := params.Count;  SetLength(arrString,len);  for i := 0 to len - 1 do  begin    // arrString[i] := params.Get(i).ToString;    //arrString[i] := params.Pairs[i].JsonString.ToString;    arrString[i] :=  StringReplace(params.Pairs[i].JsonString.ToString,[rfReplaceAll]);  end;  // ItemArry:= params.GetValue(‘JsonData‘) as TJsONArray;  s1 := TStringList.Create;  for i := 0 to length(arrString) - 1 do  begin    s1.Add(arrString[i]);  end;  s1.sort;  for i := 0 to s1.Count - 1 do  begin    arrString1[i] := s1.Strings[i];  end;  TMPStr := ‘‘;  for i := 0 to len - 1 do  begin    // TMPValue := params.GetValue(arrString1[i]).ToString;    TMP1 := StringReplace(arrString1[i],[rfReplaceAll]);    if arrString1[i] <> JsonData then    begin      TMPValue := StringReplace(params.Values[TMP1].ToString,‘‘,[rfReplaceAll]);//params.Values[TMP1].ToString;    end    else    begin      TMPValue := params.Values[TMP1].ToString;    end;    if TMPValue <> ‘‘ then    begin      if TMPStr <> ‘‘ then        TMPStr := TMPStr + &;      TMPStr := TMPStr + arrString1[i] + = + TMPValue;    end;  end;  Result := TMPStr;end;---------------------------------------------------------------------------------------------------------------对于数值类型就需要使用TJsONNumber了,TJsONNumber支持Double、Integer、Int64等。使用方法如下uses Data.DBXJsON;var  JsON: TJsONObject;begin  JsON := TJsONObject.Create;  JsON.AddPair(Double,TJsONNumber.Create(123.456));  JsON.AddPair(Integer,TJsONNumber.Create(6789));  JsON.AddPair(string,TJsONNumber.Create(1000));  Memo1.lines.Text := JsON.ToString;  //=> {"Double":123.456,"Integer":6789,"string":1000}  JsON.Free;Boolean类型的值需要用到TJsONTrue和TJsONFalse。uses System.JsON;var  JsON: TJsONObject;begin  JsON := TJsONObject.Create;  JsON.AddPair(,TJsONTrue.Create);  JsON.AddPair(,TJsONFalse.Create);  Memo1.lines.Text := JsON.ToString;  //=> {"真":true,"假":false}  JsON.Free;
总结

以上是内存溢出为你收集整理的DELPHI XE10,JSON 生成和解析,再利用INDYHTTP控件POST全部内容,希望文章能够帮你解决DELPHI XE10,JSON 生成和解析,再利用INDYHTTP控件POST所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1273955.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存