大家晚上好!
我目前正在尝试为桌面编写一个 CloudFlare
客户端。我已连接到他们的 API,并成功通过 POST 请求检索了 JSON 结果(结果已输出到 TMemo
)。现在我想将这些结果解析到一个 TListBox
中(请参见粗体区域的示例)。该项目是使用 Firemonkey
设计的。
以下是带有一些示例内容的响应格式化布局;
{
- response: {
|- ips: [
|- {
ip: "xxx.xxx.xxx.xxx",
classification: "threat",
hits: xx,
latitude: null,
longitude: null,
zone_name: "domain-example1"
},
- {
ip: "yyy.yyy.yyy.yyy",
classification: "robot",
hits: yy,
latitude: null,
longitude: null,
zone_name: "domain-example2"
}
]
}
result : "success",
msg: null
}
我尝试了几个不同的组件-SuperObject、Paweł Głowacki的JSON Designtime解析器、Tiny-JSON、LKJSON和内置的DBXJSON。但是,我对JSON没有任何经验,似乎找不到最基本的示例可以入门。其中许多示例显示样本数据,但我尝试的所有示例似乎都不能按照我的期望工作,很可能是因为我误解它们了。我想这些组件应该是可行的,所以我需要指导如何开始。
在“ips”“数组”中有数百个甚至上千个结果(如果那不正确,我道歉,我认为它被称为数组,但是我完全不了解JSON)。
我真正需要的是一些极其基础的样例代码,然后我可以从中构建(以及用于解析的哪个组件等)。
例如,如果我想从JSON结果获取每个“ip”,并将每个“ip”作为单独的项目放入TListBox(使用TListBox.add方法),我该怎么做?
当我说“ip”时,我指的是该值(在上面的格式化布局中,这将是“xxx.xxx.xxx.xxx”或“yyy.yyy.yyy.yyy”)。
此外,如果我想根据IP从JSON结果中找到一个“记录”,并将数据输出到Delphi数组中,例如:
Result : Array of String = ['"xxx.xxx.xxx.xxx"','"threat"','xx','null','null','"domain-example1"'];
这是否可以使用JSON实现?(如果您认为这是一个单独的问题或与主题无关,则可以编辑它,而不是关闭整个问题)。我最接近的情况是,在每个单独的TListItem中不仅有IP地址,而且还有其他所有数据(即响应,ips,ip,分类,xxx.xxx.xxx.xxx以及每个非空项之间还有多个空项)。我确定这非常简单,但是JSON上有太多信息,对于刚接触该格式的人来说有点让人不知所措。最好的问候,Scott Pritchard.
TMemo
中获得了纯文本JSON(即通过API检索的未解析字符串),因此无法弄清楚如何将其lines.text
放入所需的JSONObject
响应中。此外,ips:= pair.value as TJSONArray
返回E2015 - Operator not applicable
。 - Scott PTJSONObject.Parse
。那行代码应该使用pair.JsonValue
而不是之前的写法。我的错。 - Mason WheelerSystem.JSON
单元,以便示例能够正常工作。 - Jacques Koekemoer