gpt4 book ai didi

c++ - 如何在 JSON 中标记对象的继承?

转载 作者:行者123 更新时间:2023-11-28 06:39:07 26 4
gpt4 key购买 nike

我将要设计一种简单的 JSON 数据格式,它将序列化一些略有不同的机器类型的配置数据。数据格式应支持继承——如果“InheritedObject”中只有一个(或几个)参数发生变化,我可以主要使用“BaseObject”的参数。我的第一个想法显示在以下代码片段中:

{
"BaseObject":
{
"Description": "some text",
"Type": "4",
"Value": 0.33
},

"InheritedObject":
{
"Parent": "BaseObject",
"Element_3": 11
}
}

我至少有三个用例:

  • 从 JSON 中读取(如果我使用“InheritedObject”,我想从 Inherited Object 中获取所有元素以及 BaseOjbect 中未在 InheritedObject 中被覆盖的元素)
  • 写入 JSON((自动?)比较“BaseObject”和“InheritedObject”之间的差异并将差异写入“InheritedObject”)
  • 基类中参数的更改也应自动更改继承对象中的参数。

我认为这应该可行,但在读取和写入 JSON 时需要一些额外的工作。

在 JSON 中是否有“内置”功能或至少良好的支持来做到这一点?如果是这样,哪个 C++ JSON 库支持它(JsonCpp、JSON Spirit)?或者是否有从头开始实现此功能的最佳实践方法。或者在 XML 或 YAML(或其他任何东西)中是否对这项任务有很好的支持——我还没有完全固定在 JSON 上?

最佳答案

我所知道的大多数序列化工具/库都不使用这种方法,而是将类和所有实例数据存储到一个 JSON 对象中。我不确定您一开始为什么想要这个,因为一些通常非常简单的操作(有多少个 [类型 X] 对象?)可能会变得非常复杂且计算速度缓慢(简单存储:完成 JSON 对象的数量。您使用“存储继承”的方法:好吧,加载所有内容,解析继承的数据“引用”等)。

我不太认为有必要将基础数据和继承的类数据分开,因为您可以在读取数据时忽略未知属性(与处理真正的 C++ 对象相反)。所以我不建议把它弄得这么复杂,把所有的对象数据存储在一个 JSON 对象中就行了。如果这是你的原因,你也不能在 C++ 中有重复的属性。

如果您正在考虑存储大小,那么很可能不值得为此付出努力。除非你要存储数百万个对象,否则 JSON 的冗长文本格式无论如何都不是选择的工具。在这种情况下,请选择二进制格式,如 boost.serialization、QDataStream 或类似格式。

关于c++ - 如何在 JSON 中标记对象的继承?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26273130/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com