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
Dionatan VieiraDionatan Vieira 

Malformed JSON: Expected '[' at the beginning of List/Set

Hello anywone! 
I'm getting the error 

"Malformed JSON: Expected '[' at the beginning of List/Set" when my Integration tryes to cath a result of a external system.

The return of the API is:
[
    {
        "idGeral": 1000021541136,
        "dtAtz": "2014-08-07 15:42:40.0",
        "cdGrupoSimilarItem": 1466,
        "itens": [
            {
                "preco": 0,
                "flPromocao": false,
                "pcMaxDescontoAut": 0,
                "ipi": 0,
                "st": 0,
                "ipiSt": 0,
                "idItem": 1027,
                "cdItem": "10070300",
                "nmItem": "JUNTA CABEÇOTE H100/L200/HR/K2500 2.5 8V FIBRA 1.55MM 4 PIC*",
                "nmReduzido": "JUNTA CABEÇOTE H100 2.5 8V 97/... L200 2.5 8V 92/../02 / HR/K2500 2.5 8V 05/../12 FIBRA 1.55MM 4 PIC",
                "curvaAbc": "A",
                "curvaAbcForn": "C",
                "flAtivo": "S",
                "cdGrupo": 110,
                "cdSubgrupo": 1,
                "unMedCompra": "UNID",
                "unMedArmazenagem": "PC",
                "unMedEstoque": "PC",
                "unMedVenda": "PC",
                "cdLinhaProduto": 4,
                "cdOriginal": "",
                "cdMarca": 1,
                "cdFabricante": "10070300",
                "fichaTecnica": "DIAMETRO PISTÃO 92,50 MMESPESSURA 1,55 MMALTURA DO PISTÃO A PARTIR DE 0,680 ATÉ 0,744 MM",
                "qtAtual": 12.0,
                "cstOrigem": "",
                "obs": "Teste",
                "obsConferenciaSaida": "",
                "obsEmbalagem": "",
                "obsCompras": "\r\n",
                "obsFichaTecnica": "DIAMETRO PISTÃO 92,50 MMESPESSURA 1,55 MMALTURA DO PISTÃO A PARTIR DE 0,680 ATÉ 0,744 MM",
                "nmMarca": "AJUSA",
                "estoqueDisponivel": true,
                "temSimilares": true
            }
        ],

        "codigos": [
            {
                "codigo": "2231142855",
                "descricao": "ORIGINAL"
            }
        ]
    }
]

The req is:
HttpResponse res = h.send(req);
                System.debug(res.getBody());
                String s = res.getBody();
                retorno = (List<SimilarWrapper>)System.JSON.deserialize(s, List<SimilarWrapper>.class);
The classes are: 

public class SimilarWrapper{
        public Long idGeral {get;set;}
        public String dtAtz {get;set;}
        public Integer cdGrupoSimilarItem {get;set;}
        public List<IntegracaoProdutoUtils.ProdutoWrapper> itens {get;set;}
        public List<CodigoWrapper> codigos {get;set;}

    public class CodigoWrapper{
        @AuraEnabled
        public String codigo {get;set;}  
        @AuraEnabled      
        public String descricao {get;set;}        
    }

The second wrapper (IntegracaoProdutoUtils.ProdutoWrapper) is:

public static List<Product2> ProdutoConstruct(List<ProdutoWrapper> produtos){
        
        List<Product2> ret = new List<Product2>();               
        
        for(ProdutoWrapper produto: produtos){
            
            Product2 pt = new Product2(); 
            pt.nvpreco__c = produto.preco;
            pt.nvflPromocao__c = produto.flPromocao;
            pt.nvpcMaxDescontoAut__c = produto.pcMaxDescontoAut;
            pt.nvipi__c = produto.ipi;
            pt.nvst__c = produto.st;
            pt.nvipiSt__c = produto.ipiSt;
            pt.IdGeral__c = produto.idItem;
            pt.CodigoProduto__c = produto.cdItem;
            pt.CodigoItem__c = produto.cdItem;
            pt.Name = produto.nmItem;
            pt.NomeReduzido__c = produto.nmReduzido;
            pt.CurvaABCImpave__c = produto.curvaAbc;        
            pt.CurvaABCFornecedor__c = produto.curvaAbcForn;
            if (produto.flAtivo.tolowercase() == 's'){
                pt.Ativo__c = true;
            }else{
                pt.Ativo__c = false;
            }
            if (produto.cdGrupo != null) {
                Grupo__c grupo = new Grupo__c(CodigoGrupo__c = produto.cdGrupo);
                pt.Grupo__r = grupo;          
            } 
            if (produto.cdGrupo != null && produto.cdSubgrupo != null) {
                Subgrupo__c subgrupo = new Subgrupo__c(CodigoSubGrupo__c = '' + produto.cdGrupo + produto.cdSubgrupo);            
                pt.Subgrupo__r = subgrupo;
            }
            pt.UnidadeCompra__c = produto.unMedCompra;
            pt.UnidadeArmazenagem__c =  produto.unMedArmazenagem;
            pt.UnidadeEstoque__c = produto.unMedEstoque;
            pt.UnidadeVenda__c = produto.unMedVenda;
            pt.CodigoLinhaProduto__c = produto.cdLinhaProduto != null ? Decimal.valueOf(produto.cdLinhaProduto) : null;
            pt.CodigoOriginal__c = produto.cdOriginal;
            if (produto.cdMarca != null) {     
                Marca__c marca = new Marca__c(CodigoMarca__c = produto.cdMarca);            
                pt.Marca__r = marca;
            }
            pt.CodigoFabricante__c = produto.cdFabricante; 
            // não achei campo no Product2 para bater com: fichaTecnica            
            pt.nvqtAtual__c = produto.qtAtual;
            //if(produto.qtAtual != null && produto.qtAtual != ''){
                //pt.Quantidade__c = Decimal.valueOf(produto.qtAtual);} 
            pt.nvcstOrigem__c = produto.cstOrigem;
            pt.nvobs__c = produto.obs;
            pt.nvobsConferenciaSaida__c = produto.obsConferenciaSaida;
            pt.obsEmbalagem__c = produto.obsEmbalagem;
            pt.obsCompras__c = produto.obsCompras;
            pt.obsFichaTecnica__c = produto.obsFichaTecnica;
            pt.nvnmMarca__C = produto.nmMarca;
            pt.nvestoqueDisponivel__c = produto.estoqueDisponivel;
            pt.nvtemSimilares__c = produto.temSimilares;
            pt.Integrado__c = true;
            // pt.QuantidadeImagens__c = produto.qtImagem;
            //if(!ret.contains(pt)){
            ret.add(pt);
            //}
            
        }
        
        return ret;
    }
Alain CabonAlain Cabon
The second wrapper (IntegracaoProdutoUtils.ProdutoWrapper) is not provided in your question.

That should be something like that:

public class IntegracaoProdutoUtils {
    public class ProdutoWrapper {  ... }
}
Dionatan VieiraDionatan Vieira
Hello Alain!
Follows:

public class ProdutoWrapper{
        
        @AuraEnabled
        public String preco {get;set;}
        @AuraEnabled
        public String flPromocao {get;set;}
        @AuraEnabled
        public String pcMaxDescontoAut {get;set;}
        @AuraEnabled
        public String ipi {get;set;}
        @AuraEnabled
        public String st {get;set;}
        @AuraEnabled
        public String ipiSt {get;set;}
        @AuraEnabled
        public String idItem{get;set;}
        @AuraEnabled
        public String cdItem {get;set;}
        @AuraEnabled
        public String nmItem {get;set;}
        @AuraEnabled
        public String nmReduzido{get;set;}
        @AuraEnabled
        public String curvaAbc{get;set;}
        @AuraEnabled
        public String curvaAbcForn{get;set;}
        @AuraEnabled
        public String flAtivo {get;set;}
        @AuraEnabled
        public String cdGrupo {get;set;}
        @AuraEnabled
        public String cdSubgrupo{get;set;}
        @AuraEnabled
        public String unMedCompra {get;set;}
        @AuraEnabled
        public String unMedArmazenagem {get;set;}
        @AuraEnabled
        public String unMedEstoque{get;set;}
        @AuraEnabled
        public String unMedVenda {get;set;}
        @AuraEnabled
        public String cdLinhaProduto {get;set;}
        @AuraEnabled
        public String cdOriginal{get;set;}
        @AuraEnabled
        public String cdMarca {get;set;}
        @AuraEnabled
        public String cdFabricante {get;set;}
        @AuraEnabled
        public String fichaTecnica{get;set;}
        @AuraEnabled
        public String qtAtual{get;set;}
        @AuraEnabled
        public String cstOrigem {get;set;}
        @AuraEnabled
        public String obs {get;set;} 
        @AuraEnabled
        public String obsConferenciaSaida {get;set;} 
        @AuraEnabled
        public String obsEmbalagem {get;set;} 
        @AuraEnabled
        public String obsCompras {get;set;} 
        @AuraEnabled
        public String obsFichaTecnica {get;set;} 
        @AuraEnabled
        public String nmMarca{get;set;}
        @AuraEnabled
        public String estoqueDisponivel{get;set;}
         @AuraEnabled
        public String temSimilares{get;set;}
        //@AuraEnabled
        //public Integer qtImagem{get;set;}
        
    }
Alain CabonAlain Cabon
The first error should be for  "obsCompras"

 "obsCompras": "\\r\\n",

https://www.geeksforgeeks.org/how-to-handle-newlines-in-json/
‘\\n’ (backward slash).
Dionatan VieiraDionatan Vieira

Hey Alain, thanks for return!
The error occurs in all sentences, including those that do not have the return pointed to by you, for example:

[
    {
        "idGeral": 1000140351640,
        "dtAtz": "2019-07-31 08:16:26.0",
        "cdGrupoSimilarItem": 11834,
        "itens": [
            {
                "preco": 0,
                "flPromocao": false,
                "pcMaxDescontoAut": 0,
                "ipi": 0,
                "st": 0,
                "ipiSt": 0,
                "idItem": 28967,
                "cdItem": "7039T",
                "nmItem": "&CABO DE EMBREAGEM (800MM)",
                "nmReduzido": "CABO DE EMBREAGEM",
                "curvaAbc": "N/F",
                "curvaAbcForn": "",
                "flAtivo": "S",
                "cdGrupo": 113,
                "cdSubgrupo": 15,
                "unMedCompra": "PC",
                "unMedArmazenagem": "PC",
                "unMedEstoque": "PC",
                "unMedVenda": "PC",
                "cdLinhaProduto": 2,
                "cdOriginal": "",
                "cdMarca": 79,
                "cdFabricante": "7039",
                "fichaTecnica": "",
                "qtAtual": 1.0,
                "cstOrigem": "",
                "obs": "",
                "obsConferenciaSaida": "",
                "obsEmbalagem": "",
                "obsCompras": "",
                "obsFichaTecnica": "",
                "nmMarca": "TUBA",
                "estoqueDisponivel": true,
                "temSimilares": true
            }
        ],
        "codigos": [
            {
                "codigo": "155030",
                "descricao": "CABOVEL"
            },
            {
                "codigo": "30-444/30-434",
                "descricao": "FÂNIA"
            },
            {
                "codigo": "90522447",
                "descricao": "ORIGINAL"
            },
            {
                "codigo": "GM261C",
                "descricao": "EFRARI"
            }
        ]
    }
]

Alain CabonAlain Cabon
The first data are correct for JSON parsing with public List<ProdutoWrapper> itens {get;set;}  and  "obsCompras": "\\r\\n",