晚上好!解析JSON到TListBox
我目前正試圖爲桌面組裝一個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's JSON Designtime Parser,Tiny-JSON,LKJSON和內置的DBXJSON。但是,我完全沒有使用JSON的經驗,而且我似乎無法找到可以從中入手的最基本的示例。他們中的很多人都會顯示樣本數據,但我所嘗試過的所有人似乎都沒有像我期望的那樣工作,很可能是因爲我誤解了他們。我會假設組件能夠正常工作,所以我需要入門指導。
ips
「數組」中有數百個(通常是數千個)結果(我道歉,如果這不正確,我會認爲它被稱爲數組,但是我對JSON完全陌生)。
我真正在尋找的是一些非常基本的示例代碼,我可以從中構建(以及它用於解析的組件等)。
例如,如果我想抓住每一個ip
從JSON結果,並把每一個作爲一個單獨的項目爲TListBox
(使用TListBox.add
方法),我將如何去實現呢?
當我說ip
,我的意思是價值(在格式化佈局上面,這將是xxx.xxx.xxx.xxx
或yyy.yyy.yyy.yyy
)。另外,如果我想從JSON結果中找到IP的「記錄」(?)並將數據輸出到一個delphi數組中 - 例如:
Result : Array of String = ['"xxx.xxx.xxx.xxx"','"threat"','xx','null','null','"domain-example1"'];
這可能與JSON? (如果這被看作是一個單獨的問題或者太無關聯,請隨意編輯它,而不是將問題作爲一個整體)。
我得到這個最近已經不僅是IP的,但在一個單獨的TListItem
(即response
,ips
,ip
,classification
,xxx.xxx.xxx.xxx
所有其他數據片與一切有它自己的項目,有幾個空的項目一起在每個非空項目之間)。
我確定這個過程非常簡單,但是有很多關於JSON的信息,對於那些剛接觸這種格式的人來說,這是有點壓倒性的。
最好的問候, Scott Pritchard。
非常感謝梅森!答案很好,我現在瞭解這些概念。我有點困惑,儘管我可能沒有在原始問題中解釋我自己(我曾經在開場白中說過,但在問題結束時很容易忘記)。 我應該提到,我已經在'TMemo'中獲得了純文本JSON(即通過API檢索到的未解析字符串),因此無法弄清楚如何將這個'lines.text'放入過程所需的'JSONObject'響應。另外,'ips:= pair.value as TJSONArray'返回'E2015 - 操作符不適用'。 – 2012-07-17 00:31:45
@scott:看看'TJSONObject.Parse'。而該行應該使用'pair.JsonValue'來代替。我的錯。 – 2012-07-17 01:16:39
爲了將來的參考(以及其他人正在尋找它),你需要在你的用例子句中包含'System.JSON'單元才能使這個例子工作 – 2015-09-22 12:00:16