Delphi对象以json字符串如何忽略空字段和空字段

时间:2016-02-15 13:33:23

标签: json rest delphi delphi-10-seattle

我有一个休息请求课程如下

TRedeemItemsClass = class
private
  [JSONName('RedeemCode')]
  FRedeemCode: String;
  [JSONName('AssetKey')]
  FAssetKey:String;
public
  property RedeemCode: String read FRedeemCode write FRedeemCode;
  property AssetKey:String read FAssetKey write FAssetKey;
  function ToJsonString: string;
  class function FromJsonString(AJsonString: string): TRedeemItemsClass;
end;

implementation

function TRedeemItemsClass.ToJsonString: string;
begin
  result := TJson.ObjectToJsonString(self);
end;

class function TRedeemItemsClass.FromJsonString(AJsonString: string): TRedeemItemsClass;
begin
  result := TJson.JsonToObject<TRedeemItemsClass>(AJsonString)
end;
jObj := TJSONObject.ParseJSONValue(TEncoding.ASCII.GetBytes(reqRedeem.ToJsonString), 0) as TJSONObject;

使用这行代码,我得到了像

这样的json请求字符串
  

{&#34; RedeemCode&#34;:&#34;&#34;&#34; AssetKey&#34;:&#34;为XXXXX&#34;}

正如所料。

兑换请求正文json字符串应该是其中之一( 根据客户提供的信息 assetkey redeemcode

  

{&#34; RedeemItems&#34;:[{&#34; AssetKey&#34;:&#34;为XXXXX&#34;}]}

  

{&#34; RedeemItems&#34;:[{&#34; RedeemCode&#34;:&#34;为XXXXX&#34;}]}

所以在短期内,我想忽略空或零的所有字段(包括数组)。

我使用的是Delphi 10 Seattle。

2 个答案:

答案 0 :(得分:1)

您只需检查nil条件:

即可
if Assigned(field) then
begin
  // do something
end;

if field <> nil then
begin
  // do something
end;

答案 1 :(得分:0)

您可以使用:

function TRedeemItemsClass.ToJsonString: string;
begin
  result := TJson.ObjectToJsonString(self, TJsonOption.joIgnoreEmptyStrings]);
end;