发现难以在delphi中处理JSON

Teu*_*onk 2 delphi api json world-of-warcraft delphi-xe3

我正在开发一个应用程序,它将从WoW军械库中获取你角色的数据.示例角色:我的魔兽角色(链接)

我将通过调用暴雪提供的API获取我想要的所有信息,我将得到响应JSON.示例JSON:上述字符的JSON响应(链接)

起初我尝试从JSON字符串操作中获取数据.这意味着,分割我的字符串,在字符串中搜索关键字以找到位置并将其格式化为单个数据片段,例如人才和统计数据.

这在开始时工作得很好但是因为我想要更多的数据这变得更难,因为我在所有字符串上运行的许多功能它只是变成了一个大模糊而且不清楚我在那一刻看到了什么.

有一个很好的方法来处理我的JSON?我正在考虑获得JSON并创建一个空类.在完成JSON它的同时会生成属性并将值存储在那里.但我不知道是否以及如何动态生成属性.

在未来,我想获得更多的数据,但首先我想在考虑之前启动并运行.

有没有人对此有任何想法/建议?

提前致谢.

Ari*_*The 5

你的JSON看起来很简短和基本.它似乎不需要特殊的速度或异国情调的功能. http://jsonviewer.stack.hu/#http://eu.battle.net/api/wow/character/moonglade/Xaveak?fields=stats,talents

虽然从Delphi XE2开始,你真的有库存JSON解析器作为DB-Express套件的一部分,但仍然存在以下问题:
1.它被告知会导致速度和可靠性方面的问题.
2.它会让你的程序依赖于DB-Express软件包(为什么,如果你实际上没有使用它来进行数据库访问?)3.它将你的未来绑定到Delphi的企业版.

所以你最好尝试一些第三方库.

其中最快的可能是Synopse JSON解析器,它们的mORMot库的侧面项目.它通常是很好的代码,非常注重速度和开发人员积极帮助他们的论坛.

另一个已知和使用的库是Henri Gourvest的SuperObject.它声称是Delphi中最快的解析器,虽然由于上述原因可能不再如此,但速度对于大多数任务来说已经足够了.Henri本人并没有积极支持他的前项目,总是做一些新的事情,所以稀缺的文档(也在安装包中重复)将是你正式的,加上有一个其他用户可能会帮助你的论坛.OTOH SuperObject设计背后的主要思想是一致性,虽然有些任务可以更好地记录下来 - 这主要是由于不确定性"如果这项任务在没有任何特殊处理的情况下真正适用于统一的事情".但通常情况确实如此.
PS.既然是维基,你可以尝试为未来的用户增强它;-)

所以回到文档,你需要

1)将整个JSON加载到库中.您可以通过http库创建TStream或使用数据提供字符串缓冲区来实现:即解析手册的JSON数据结构部分

2)读取"名称"和"级别"之类的值 - 在如何读取对象的属性值中描述在那里.

3)登记像"talent"这样的数组 - 在浏览数据结构部分中描述.