【发布时间】:2013-02-03 23:31:40
【问题描述】:
大家晚上好。
我目前正在开发我的产品WinFlare 的跨平台兼容版本。我面临的问题是SuperObject 仍然不与 Firemonkey 跨平台兼容。无论如何,我在产品的原始版本中使用了它,但现在我想创建一个跨平台版本,而不是仅限于 Windows 的版本,我发现它很麻烦。
DBXJSON 是我经过大量研究后能够找到的唯一跨平台解决方案,但事实证明,尝试和处理这令人沮丧。我为它找到的大多数示例要么不适用于我的情况,要么它们太复杂而无法从中获得任何有用的信息。有很多讨论,但我只是在努力掌握 SuperObject 如此简单的任务。今晚的大部分时间我都在努力寻找可以构建的东西,但我所尝试的一切都让我回到了原点。
理想情况下,我想修复 SuperObject,但我缺乏深入了解使其与 OS X 跨平台兼容(并为移动工作室做好准备)的知识。我欢迎对此提出任何建议,但我想没有人有时间完成如此艰巨的任务,看来 DBXJSON 是我唯一的选择。
我处理的 JSON 布局还是一样的;
{
response: {
ips: [
{
ip: "xxx.xxx.xxx.xxx",
classification: "threat",
hits: xx,
latitude: xx,
longitude: xx,
zone_name: "domain-example1"
},
{
ip: "yyy.yyy.yyy.yyy",
classification: "robot",
hits: yy,
latitude: xx,
longitude: xx,
zone_name: "domain-example2"
}
]
}
result : "success",
msg: null
}
ips 数组中可能有数百个结果。假设我想解析数组中的所有项目并提取每个 latitude 值。让我们再假设一下,我打算将它们输出到一个数组中。这是我想使用的那种代码模板;
procedure ParseJsonArray_Latitude(SInput : String);
var
i : Integer;
JsonArray : TJsonArray;
Begin
// SInput is the retrieved JSON in string format
{ Extract Objects from array }
for i := 0 to JsonArray.Size-1 do
begin
Array_Latitude[i] := JsonArray.Item[i].ToString;
end;
end;
基本上,在上面写着{ Extract Objects from array } 的地方,我想要使用DBXJSON 的最基本 解决方案来解决我的问题。显然,我在上面的模板中显示的与JsonArray 相关的调用可能不正确——它们只是为了提供帮助。
【问题讨论】:
-
SuperObject 只是文本处理。我看不出它如何不适用于所有平台
-
SuperObject 使用
Windows和WinSock单位,以及大量使用Windows 专用例程的过程。它确实有一些适用于 FPC 和 UNIX 的 IFDEFS,但没有适用于 MACOS。它深深嵌入在代码中。 -
很公平。不过看起来很穷。
-
看看code.google.com/p/dwscript/source/browse JSON 单元可以“单独”使用。
-
我确实研究了 dwscript,但与 SuperObject 一样,
dwsJSON.pas也引入了一些其他与 OS X 不跨平台兼容的单元(例如dwsXPlatform)。
标签: json delphi delphi-xe3 firemonkey-fm2