Buenas tardes chicos!Análisis JSON en TListBox
Actualmente estoy tratando de armar un cliente CloudFlare
para el escritorio. Me he conectado a su API y recuperé con éxito los resultados de JSON con una solicitud POST (cuyos resultados se han generado en TMemo
). Ahora quiero analizar estos resultados en un TListBox
(ver el área en negrita, por ejemplo). El proyecto está siendo diseñado en Firemonkey
.
Aquí está el diseño formateado de la respuesta con algunos ejemplos de contenido;
{
- 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
}
que he probado varios componentes diferentes - SuperObject, Paweł Głowacki's JSON Designtime Parser, Tiny-JSON, LKJSON y el construido en DBXJSON. Sin embargo, no tengo ninguna experiencia con JSON en absoluto y parece que no puedo encontrar los ejemplos más básicos de los que puedo partir. Muchos de ellos muestran datos de muestra, pero todos los que he probado no parecen funcionar como esperaba, muy probablemente porque los estoy malinterpretando. Asumiría que los componentes funcionan, entonces necesito una guía para comenzar.
Hay cientos, a menudo miles, de resultados en el ips
"matriz" (me disculpo si eso no es correcto, supongo que se conoce como una matriz, pero de nuevo, soy completamente nuevo en JSON).
Lo que realmente estoy buscando es algún tipo de código de muestra extremadamente básico que pueda compilar (junto con qué componente usa para analizar y demás).
Por ejemplo, si quería aprovechar cada ip
partir de los resultados JSON, y poner a cada uno como un punto separado en un (TListBox.add
método que usa) TListBox
, ¿cómo hago para lograr esto?
Cuando digo ip
, quiero decir el valor (en el diseño de formato anterior, esto sería xxx.xxx.xxx.xxx
o yyy.yyy.yyy.yyy
).
Además, si quería encontrar un "registro" (?) Por su IP a partir de los resultados JSON y enviar los datos a una matriz delphi - por ejemplo;
Result : Array of String = ['"xxx.xxx.xxx.xxx"','"threat"','xx','null','null','"domain-example1"'];
¿Eso es posible con JSON? (Si esto se ve como una pregunta separada o sin relación, no dude en editarlo en lugar de cerrar la pregunta como un todo).
lo más cerca que llegué a este tenía no sólo los de IP, pero cualquier otra pieza de datos en particular TListItem
(es decir response
, ips
, ip
, classification
, xxx.xxx.xxx.xxx
y todo lo demás tenía su propio tema, junto con varios elementos vacíos entre cada elemento no vacío).
Estoy seguro de que es extremadamente simple de hacer, pero hay tanta información en JSON que es un poco abrumador para las personas nuevas en el formato.
Saludos cordiales, Scott Pritchard.
Muchas gracias Mason! La respuesta es genial y ahora entiendo los conceptos. Estoy un poco confundido, aunque tal vez no me explique lo suficiente en la pregunta original (lo dije en el primer partido, pero es fácil olvidarlos al final de la pregunta). Debo mencionar que tengo el texto plano JSON (es decir, una cadena no analizada recuperada a través de la API) en un 'TMemo' y, como tal, no puedo encontrar la forma de colocar' lines.text' de esto en el 'JSONObject' respuesta requerida por el procedimiento. Además, 'ips: = pair.value as TJSONArray' devuelve' E2015 - Operator not applicable'. –
@scott: Eche un vistazo a 'TJSONObject.Parse'. Y esa línea probablemente debería usar 'pair.JsonValue' en su lugar. Mi error. –
Para referencia futura (y para cualquier otra persona que lo busque), debe incluir la unidad 'System.JSON' en su cláusula uses para que el ejemplo funcione –