【问题标题】:Default values for unknown elements in mORMot / Synopse JSONmORMot / Synopse JSON 中未知元素的默认值
【发布时间】:2020-08-19 13:56:17
【问题描述】:

我真的很喜欢 mORMot / Synopse 实现 JSON 处理的方式,尤其是您可以在代码中使用 JSON 元素的方式(例如 MyString := myjson.name)。这在包装只有一个变体 (JSON) 的对象时非常直观和有用,我们通过 getter/setter 访问状态,如下所示:

  TMyObject = class
  private
    FState: Variant;

    function GetName: String;
  public
    constructor Create(AJson: Variant);

    property Name: String read GetName;
  end;

  function TMyObject.GetName: String;
  begin
    Result := FState.name;
  end;

它真的很强大,但是如果在相应的 JSON 文档中找不到元素,我想获取“默认”变体值(因此,如果“名称”不存在,上面的示例应该返回一个空字符串)。

我不想使用NullStrictConvert,因为那不是线程安全的并且会影响我们程序的其余部分。当然我可以检查VarIsNull(FState.name),但是我必须对每个元素都这样做,而且我不希望有这个额外的样板。

有什么建议吗?

【问题讨论】:

    标签: json delphi mormot


    【解决方案1】:

    当您将一些 JSON 反序列化为一个对象时,丢失的字段将保持不变 IIRC。

    因此,您可以在反序列化 JSON 之前将字段设置为其默认值。

    一种方法是从TSynPersistent 继承并覆盖Create 构造函数并设置默认值。

    编辑:您可以使用TDocVariantData 代替variant,并调用GetAsRawUTF8() 以及如果该属性不存在则返回false 的此类方法。

    【讨论】:

    • 如果我们使用 JSONToObject,我想这是真的,但我们不是。这种情况还有其他可能吗?
    • 今天这救了我的培根 :-)
    猜你喜欢
    • 1970-01-01
    • 2013-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-26
    相关资源
    最近更新 更多