【问题标题】:Delphi object to json string how to ignore empty and null fieldsDelphi对象到json字符串如何忽略空和空字段
【发布时间】:2016-02-15 13:33:23
【问题描述】:

我有一个休息请求类如下

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 请求字符串,例如

{"RedeemCode":"","AssetKey":"xxxxx"}

正如预期的那样。

兑换请求正文 json 字符串应该是其中之一( 根据从客户收到的信息assetkeyredeemcode

{"RedeemItems":[{"AssetKey":"xxxxx"}]}

{"RedeemItems":[{"RedeemCode":"xxxxx"}]}

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

我正在使用 Delphi 10 Seattle。

【问题讨论】:

标签: json rest delphi delphi-10-seattle


【解决方案1】:

您可以使用以下方法:

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

function TRedeemItemsClass.ToJsonObject: TJSONObject;
begin
  result := TJson.ObjectToJsonObject(self, [TJsonOption.joIgnoreEmptyStrings]);
end;

【讨论】:

    【解决方案2】:

    您可以简单地检查它的nil 条件:

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

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

    【讨论】:

      猜你喜欢
      • 2019-03-21
      • 1970-01-01
      • 2016-07-19
      • 1970-01-01
      • 2020-01-16
      • 1970-01-01
      • 2017-12-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多