function readOnly(count){ }
Starting November 20, the site will be set to read-only. On December 4, 2023,
forum discussions will move to the Trailblazer Community.
+ Start a Discussion
Iago SilvaIago Silva 

JSON deserialize

Hello everybody !!
How can I deserealize this JSON? 
 
{
    "infopay": [
        {
            "chavebanco": 4020.0,
            "codigocliente": "2000746",
            "tipotitulo": null,
            "valortitulo": 0.0,
            "datapagamento": "2021-02-20T00:00:00",
            "status": 4
        },
        {
            "chavebanco": 8886.0,
            "codigocliente": "2000466",
            "tipotitulo": null,
            "valortitulo": 0.0,
            "datapagamento": "2021-04-20T00:00:00",
            "status": 6
        },
        {
            "chavebanco": 8842.0,
            "codigocliente": "2000466",
            "tipotitulo": null,
            "valortitulo": 0.0,
            "datapagamento": "2021-04-20T00:00:00",
            "status": 8
        },
        {
            "chavebanco": 8887.0,
            "codigocliente": "2000466",
            "tipotitulo": null,
            "valortitulo": 0.0,
            "datapagamento": "2021-04-20T00:00:00",
            "status": 6
        }]
}

I have the public class TemplateDataIntegrationFieldsGATEC.InformacoesPagamentoINData and I tried to do this:
 
TemplateDataIntegrationFieldsGATEC.InformacoesPagamentoINData resp = (TemplateDataIntegrationFieldsGATEC.InformacoesPagamentoINData) JSON.deserialize(response.getBody(), TemplateDataIntegrationFieldsGATEC.InformacoesPagamentoINData.class);

List<TemplateDataIntegrationFieldsGATEC.InformacoesPagamentoINData> respList = new List<TemplateDataIntegrationFieldsGATEC.InformacoesPagamentoINData>{resp};
          
IntegrationInboundInformacoesPagamento.upsertPaymentInfo(respList);

But it gives:
 
(InformacoesPagamentoINData:[chavebanco=null, codigoFazenda=null, codigocliente=null, datapagamento=null, status=null, tipotitulo=null, valortitulo=null])

Thanks in advance :)
Best Answer chosen by Iago Silva
Maharajan CMaharajan C
Hi Iago,

1. Based on your JSON the wrapper class must be like below:
 
public class TemplateDataIntegrationFieldsGATEC {

    public List<InformacoesPagamentoINData> infopay;
    
    public class InformacoesPagamentoINData {
        public Double chavebanco;
        public String codigocliente;
        public Object tipotitulo;
        public Double valortitulo;
        public String datapagamento;
        public Integer status;
    }
}

2. Please use the below code to deserialize:
 
TemplateDataIntegrationFieldsGATEC resp = (TemplateDataIntegrationFieldsGATEC) JSON.deserialize(str, TemplateDataIntegrationFieldsGATEC.class);

system.debug(' resp --> ' +resp.infopay);

List<TemplateDataIntegrationFieldsGATEC.InformacoesPagamentoINData> respList = resp.infopay;

3. I have executed the above codes and got below o/p:
 
10:09:00.54 (74231219)|USER_DEBUG|[5]|DEBUG| resp --> (InformacoesPagamentoINData:[chavebanco=4020.0, codigocliente=2000746, datapagamento=2021-02-20T00:00:00, status=4, tipotitulo=null, valortitulo=0.0], InformacoesPagamentoINData:[chavebanco=8886.0, codigocliente=2000466, datapagamento=2021-04-20T00:00:00, status=6, tipotitulo=null, valortitulo=0.0], InformacoesPagamentoINData:[chavebanco=8842.0, codigocliente=2000466, datapagamento=2021-04-20T00:00:00, status=8, tipotitulo=null, valortitulo=0.0], InformacoesPagamentoINData:[chavebanco=8887.0, codigocliente=2000466, datapagamento=2021-04-20T00:00:00, status=6, tipotitulo=null, valortitulo=0.0])

10:09:00.54 (74417144)|VARIABLE_ASSIGNMENT|[7]|respList|[{"chavebanco":4020.0,"codigocliente":"2000746","datapagamento":"2021-02-20T00:00:00","status":4,"valortitulo":0.0},{"chavebanco":8886.0,"codigocliente":"2000466","datapagamento":"2021-04-20T00:00:00","status":6,"valortitulo":0.0},{"chavebanco":8842.0,"codigocliente":"2000466","datapagamento":"2021-04-20T00:00:00","status":8,"valortitulo":0.0},{"chavebanco":8887.0,"codigocliente":"2000466","datapagamento":"2021-04-20T00:00:00","status":6,"valortitulo":0.0}]|0x75d95d7a
10:09:00.74 (74493383)|CUMULATIVE_LIMIT_USAGE

Thanks,
Maharajan.C

All Answers

Maharajan CMaharajan C
Hi Iago,

1. Based on your JSON the wrapper class must be like below:
 
public class TemplateDataIntegrationFieldsGATEC {

    public List<InformacoesPagamentoINData> infopay;
    
    public class InformacoesPagamentoINData {
        public Double chavebanco;
        public String codigocliente;
        public Object tipotitulo;
        public Double valortitulo;
        public String datapagamento;
        public Integer status;
    }
}

2. Please use the below code to deserialize:
 
TemplateDataIntegrationFieldsGATEC resp = (TemplateDataIntegrationFieldsGATEC) JSON.deserialize(str, TemplateDataIntegrationFieldsGATEC.class);

system.debug(' resp --> ' +resp.infopay);

List<TemplateDataIntegrationFieldsGATEC.InformacoesPagamentoINData> respList = resp.infopay;

3. I have executed the above codes and got below o/p:
 
10:09:00.54 (74231219)|USER_DEBUG|[5]|DEBUG| resp --> (InformacoesPagamentoINData:[chavebanco=4020.0, codigocliente=2000746, datapagamento=2021-02-20T00:00:00, status=4, tipotitulo=null, valortitulo=0.0], InformacoesPagamentoINData:[chavebanco=8886.0, codigocliente=2000466, datapagamento=2021-04-20T00:00:00, status=6, tipotitulo=null, valortitulo=0.0], InformacoesPagamentoINData:[chavebanco=8842.0, codigocliente=2000466, datapagamento=2021-04-20T00:00:00, status=8, tipotitulo=null, valortitulo=0.0], InformacoesPagamentoINData:[chavebanco=8887.0, codigocliente=2000466, datapagamento=2021-04-20T00:00:00, status=6, tipotitulo=null, valortitulo=0.0])

10:09:00.54 (74417144)|VARIABLE_ASSIGNMENT|[7]|respList|[{"chavebanco":4020.0,"codigocliente":"2000746","datapagamento":"2021-02-20T00:00:00","status":4,"valortitulo":0.0},{"chavebanco":8886.0,"codigocliente":"2000466","datapagamento":"2021-04-20T00:00:00","status":6,"valortitulo":0.0},{"chavebanco":8842.0,"codigocliente":"2000466","datapagamento":"2021-04-20T00:00:00","status":8,"valortitulo":0.0},{"chavebanco":8887.0,"codigocliente":"2000466","datapagamento":"2021-04-20T00:00:00","status":6,"valortitulo":0.0}]|0x75d95d7a
10:09:00.74 (74493383)|CUMULATIVE_LIMIT_USAGE

Thanks,
Maharajan.C
This was selected as the best answer
ANUTEJANUTEJ (Salesforce Developers) 
Hi Iago,

>> https://json2apex.herokuapp.com/

You can use the above link that converts the JSON you have to the apex class along with the test class.

The test class you can use is below:
 
@IsTest
public class JSON2Apex_Test {
	
	static testMethod void testParse() {
		String json = '{'+
		'    \"infopay\": ['+
		'        {'+
		'            \"chavebanco\": 4020.0,'+
		'            \"codigocliente\": \"2000746\",'+
		'            \"tipotitulo\": null,'+
		'            \"valortitulo\": 0.0,'+
		'            \"datapagamento\": \"2021-02-20T00:00:00\",'+
		'            \"status\": 4'+
		'        },'+
		'        {'+
		'            \"chavebanco\": 8886.0,'+
		'            \"codigocliente\": \"2000466\",'+
		'            \"tipotitulo\": null,'+
		'            \"valortitulo\": 0.0,'+
		'            \"datapagamento\": \"2021-04-20T00:00:00\",'+
		'            \"status\": 6'+
		'        },'+
		'        {'+
		'            \"chavebanco\": 8842.0,'+
		'            \"codigocliente\": \"2000466\",'+
		'            \"tipotitulo\": null,'+
		'            \"valortitulo\": 0.0,'+
		'            \"datapagamento\": \"2021-04-20T00:00:00\",'+
		'            \"status\": 8'+
		'        },'+
		'        {'+
		'            \"chavebanco\": 8887.0,'+
		'            \"codigocliente\": \"2000466\",'+
		'            \"tipotitulo\": null,'+
		'            \"valortitulo\": 0.0,'+
		'            \"datapagamento\": \"2021-04-20T00:00:00\",'+
		'            \"status\": 6'+
		'        }]'+
		'}';
		JSON2Apex obj = JSON2Apex.parse(json);
		System.assert(obj != null);
	}
}

And for future step by step you can checkout: https://www.ktema.org/2020/04/17/json-apex-intro/

Let me know if it helps you and close your query by marking it as solved so that it can help others in the future.  

Thanks.