Buonasera ragazzi!Parsing JSON in TListBox
Attualmente sto cercando di mettere insieme un client CloudFlare
per il desktop. Mi sono connesso alla loro API e ho recuperato con successo i risultati JSON con una richiesta POST (i cui risultati sono stati convertiti in un TMemo
). Ora sto cercando di analizzare questi risultati in un TListBox
(vedi area in grassetto per esempio). Il progetto è stato progettato in Firemonkey
.
Ecco il layout formattato della risposta con alcuni contenuti di esempio;
{
- 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
}
Ho provato diversi componenti diversi - SuperObject, Paweł Głowacki's JSON Designtime Parser, Tiny-JSON, LKJSON e il costruito nel DBXJSON. Tuttavia, non ho alcuna esperienza con JSON e non riesco a trovare il più semplice degli esempi da cui iniziare. Molti di loro mostrano dati di esempio, ma tutti quelli che ho provato non sembrano funzionare come mi aspetterei, molto probabilmente perché li sto fraintendendo. Presumo che i componenti funzionino, quindi ho bisogno di una guida per iniziare.
Ci sono centinaia, spesso migliaia di risultati nell'array "ips
" (mi scuso se non è corretto, presumo sia noto come array ma, ancora una volta, sono completamente nuovo per JSON).
Quello che sto davvero cercando è una sorta di codice di esempio estremamente semplice che posso compilare da (insieme a quale componente utilizza per l'analisi e così via).
Per esempio, se volevo afferrare ogni ip
dai risultati JSON, e mettere ognuno in una voce distinta in un (TListBox.add
metodo che utilizza) TListBox
, come potrei fare per raggiungere questo obiettivo?
Quando dico ip
, intendo il valore (nel layout formattato sopra, questo sarebbe xxx.xxx.xxx.xxx
o yyy.yyy.yyy.yyy
).
Inoltre, se volessi trovare un "record" (?) Dal suo IP dai risultati JSON e inviare i dati a un array delphi - ad es.
Result : Array of String = ['"xxx.xxx.xxx.xxx"','"threat"','xx','null','null','"domain-example1"'];
è possibile con JSON? (Se questa è vista come una domanda separata o non correlata, non esitare a modificarla piuttosto che chiudere la domanda nel suo complesso).
Il più vicino ho avuto modo di questo ha avuto non solo gli ip di, ma ogni altro pezzo di dati in un separato TListItem
(cioè response
, ips
, ip
, classification
, xxx.xxx.xxx.xxx
e tutto il resto aveva il suo oggetto, insieme a diversi elementi vuoti tra ogni oggetto non vuoto).
Sono sicuro che è estremamente semplice da fare, ma ci sono così tante informazioni su JSON che è un po 'travolgente per le persone nuove nel formato.
I migliori saluti, Scott Pritchard.
Molte grazie Mason! La risposta è ottima e ora capisco i concetti. Sono un po 'confuso, anche se forse non mi sono spiegato abbastanza nella prima domanda (l'ho detto in apertura, ma è facile dimenticarlo alla fine della domanda). Devo dire che ho il JSON in chiaro (cioè una stringa non analizzata come recuperata tramite l'API) in un 'TMemo' e come tale non è in grado di capire come posizionare il' lines.text' di Risposta 'JSONObject' richiesta dalla procedura. Inoltre, 'ips: = pair.value come TJSONArray' restituisce' E2015 - Operatore non applicabile'. –
@scott: dai un'occhiata a "TJSONObject.Parse". E quella linea probabilmente dovrebbe usare 'pair.JsonValue' invece. Colpa mia. –
Per riferimento futuro (e chiunque altro lo cerchi) è necessario includere l'unità 'System.JSON' nella clausola uses per fare in modo che l'esempio funzioni –