【发布时间】:2010-12-11 04:52:37
【问题描述】:
我正在和我的朋友制作游戏。现在有一个关于级别的问题。第一个版本是用 XML 构建的。我不喜欢它有几个原因:数据太多,我们使用的解析器存在一些问题。我们正在使用 Boost,所以我决定查看 json-parser。
结构更小且经过优化。你怎么看,从强大的xml改成简单的json是不是太激进了?用大量额外数据和属性组织大型游戏关卡是否足够 json 结构的能力?
【问题讨论】:
我正在和我的朋友制作游戏。现在有一个关于级别的问题。第一个版本是用 XML 构建的。我不喜欢它有几个原因:数据太多,我们使用的解析器存在一些问题。我们正在使用 Boost,所以我决定查看 json-parser。
结构更小且经过优化。你怎么看,从强大的xml改成简单的json是不是太激进了?用大量额外数据和属性组织大型游戏关卡是否足够 json 结构的能力?
【问题讨论】:
我在用 python 编写的 webapps 中经常使用 JSON - XML 和 JSON 都有非常好的解码器。除了 XML 占用更多空间外,实际上并没有太大区别,但可读性更高。 JSON 看起来几乎已经像 Python 字典了,所以这是有道理的。 JSON 在 Web 上更常见的主要原因可能是 JSON-RPC 非常好,而 XML-RPC 考虑得不好,而且 SOAP 太重了。
所以这取决于你是否能找到一个好的 JSON 解码器,它的速度足以满足你的需要。我不经常使用 C/C++ 来提升或工作。
【讨论】:
我认为 JSON 比 XML 更适合面向数据的用例(我假设像你的用例)。 XML 是很好的标记语言;或者当一个人必须混合和匹配多个词汇表时。 对于这样的用例,我没有发现 XML 更强大。并且没有理由不能将您想要的任何数据映射到 JSON 结构。 XML 的大部分功能来自处理工具和 XML 词汇表,而不是本身相当简单的核心标记语言。
XML 和 JSON 都可能真正适合您,所以也许看看哪个有 更适合您的开发风格的库。
【讨论】:
如果您已经在使用将其放入 DOM 对象的阅读器,我认为从 XML 切换到 JSON 的麻烦是不值得的,除非您最终在此过程中更改了数据格式。特别是如果您使用编辑器来创建程序数据,因为您将拥有比 JSON 更好的工具来编辑 XML 文档。这些 DOM 对象的解析时间很可能在实现之间不会有太大差异,但如果这是一个问题,您的 JSON 实例 DOM 对象可能会占用更少的空间。您将能够在 XML 或 JSON 中存储您需要的任何内容,因此不必担心。作为一种级别描述语言,我会使用 XML,因为我可以定义一个模式,并且如果需要的话,它更容易手动编辑。此外,听起来您可能希望能够在读取数据时有效地创建这些级别,如果不需要,则尽快忽略所有额外的实例数据。 XML SAX 或拉式解析器将是理想的选择。
现在我的简短回答已经结束,我将进一步介绍一些可能有助于您更好地自己决定的信息。
您希望如何访问数据?您是想简单地阅读所有内容并访问一个大对象,还是只需要查看一次数据即可根据该信息创建对象?您对解析过程中的性能以及您对读取的新信息的响应速度有任何担忧吗?您的数据格式是否会发生很大变化?您想提供一个可以在您的应用程序之外共享此信息的标准吗?我使用什么编程语言?根据语言的不同,某些语言具有非常出色的 JSON 与 XML 工具。
如果只能选择 JSON 或 XML,我会根据与应用程序相关的用例来决定。
如果我需要在我的解析器中真正调整性能并且具有可以描述和共享并且不太可能经常更改的非常结构化的格式,我会使用 XML。我可以使用模式来描述数据结构要求,这将允许其他人轻松支持我的数据文件。如果我的信息很大,我也会使用 XML,并且我希望有机会以块的形式解析数据并将它们直接存储到对象中,这样最终会比使用通用 DOM 模型和解析器占用更小的空间。我会使用 SAX 推送阅读器或流阅读器,如果我需要在读入信息时对其进行响应,我可以使用它来拉取信息。对于 XML,有许多好的库可以快速轻松地完成此操作。如果我需要经常手动编辑数据或出于调试目的打印出来,那么 XML 文档已经具有很好的格式。
如果我需要节省实例文档空间并且我想要一个 DOM 类型的对象,我会使用 JSON。如果我有两个应用程序只是尝试通信数据,例如 Python 和 Java,我会使用 JSON,因为它可以使用 setter 和 getter 将这些读取到实例对象中,而无需复杂的框架,即使这可能会使事情变慢。如果我只需要序列化和传输数据对象,那么 JSON 将是我唯一的选择,而不是 XML。
【讨论】: