首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mORMot / Synopse JSON中未知元素的默认值

mORMot / Synopse JSON中未知元素的默认值
EN

Stack Overflow用户
提问于 2020-08-19 21:56:18
回答 1查看 166关注 0票数 1

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

代码语言:javascript
复制
  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文档中找不到元素,我希望得到'default‘变量值(所以,如果'name’不存在,上面的例子应该返回一个空字符串)。

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

有什么建议吗?

EN

回答 1

Stack Overflow用户

发布于 2020-08-19 22:36:23

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

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

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

编辑:您可以使用TDocVariantData而不是variant,如果该属性不存在,则调用GetAsRawUTF8()等返回false的方法。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63488604

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档