gpt4 book ai didi

json - 跨平台 JSON 解析

转载 作者:行者123 更新时间:2023-12-03 18:22:55 27 4
gpt4 key购买 nike

大家晚上好。

我目前正在开发我的产品的跨平台兼容版本 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 数组中可以有数百个结果。假设我想解析数组中的所有项目并提取每个纬度值。我们还假设一下,我打算将它们输出到一个数组。这是我想要使用的代码模板;

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;

本质上,它说{从数组中提取对象},我想要使用DBXJSON最基本的解决方案来解决我的问题问题。显然,我在上面的模板中显示的与 JsonArray 相关的调用可能不正确 - 它们只是作为辅助。

最佳答案

首先,解析字符串以获取对象。

var
obj: TJsonObject;

obj := TJsonObject.ParseJsonValue(SInput) as TJsonObject;

这为您提供了一个具有三个属性的对象:response、result 和 msg。尽管 ParseJsonValueTJsonObject 的一种方法,并且您的特定字符串输入恰好表示一个对象值,但它可以返回任何 TJsonValue 后代的实例,具体取决于给出的 JSON 文本。知道从哪里开始可能是使用 DbxJson 时最困难的部分。

接下来,获取响应属性值。

response := obj.Get('response').JsonValue as TJsonObject;

该结果应该是另一个对象,这次带有一个属性 ips。获取该属性,该属性应该有一个值数组。

ips := response.Get('ips').JsonValue as TJsonArray;

最后,您可以从数组中获取值。看起来您希望这些值是数字,因此您可以这样转换它们。

for i := 0 to Pred(ips.Size) do
Array_Latitude[i] := (ips.Get(i) as TJsonObject).Get('latitude').JsonValue as TJsonNumber;

完成后,请记住释放 obj,但不要释放此处提到的其他变量。

关于json - 跨平台 JSON 解析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14678607/

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