JSON: serializar y deserializar
Los sistemas se hablan en JSON, un texto con nombres y valores. Apex lo convierte en objetos con JSON.deserialize y convierte tus objetos en JSON con JSON.serialize: tú solo defines el molde.
✓ En esta sub-lección
- 01Leer un JSON: objetos, listas y pares nombre-valor.
- 02Convertir un JSON en un objeto de Apex con una clase molde.
- 03Convertir objetos de Apex en JSON para enviarlos.
La nutria: ¿Te acuerdas? · Repaso de la lección 1
Antes de usar el cuerpo de una respuesta, ¿qué miras?
fetchRenewal devuelve un texto: {"erpCode":"ERP-100","amount":12500.00,"status":"PAID"}. Para saber el importe habría que buscar dentro con substring, y eso se rompe al primer cambio. Ese texto es , y Apex sabe convertirlo en un objeto con campos de verdad.
Leer un JSON
- Las llaves { } encierran un objeto: una serie de pares «nombre»: valor.
- Los corchetes [ ] encierran una lista de valores u objetos.
- Los textos van entre comillas dobles; los números y true/false, sin comillas.
Del JSON al objeto: una clase molde
public class ErpRenewal { // un atributo por cada nombre del JSON, con su mismo nombre
public String erpCode;
public Decimal amount;
public String status;
}
ErpRenewal r = (ErpRenewal) JSON.deserialize(res.getBody(), ErpRenewal.class);
System.debug(r.amount); // 12500.00, ya como DecimalLO QUE MANDA EL ERP
{"erpCode":"ERP-100","amount":12500.00,"status":"PAID"}
ErpRenewal
- erpCode'ERP-100'
- amount12500.00
- status'PAID'
Cada nombre del JSON cae en el atributo que se llama igual.
Si el JSON trae un nombre que tu clase no tiene, se ignora. Si tu clase tiene un atributo que el JSON no trae, se queda en null. Y el camino de vuelta es una línea: JSON.serialize(objeto) convierte cualquier objeto o lista de Apex en texto JSON, listo para setBody. Cuando no conoces la forma de antemano, JSON.deserializeUntyped te da un Map<String, Object> que recorres por nombre.
La nutria: El mapeo de columnas de Data Loader
La nutria: ¿Y por qué no un Flow? Aquí Flow también lo lee