Estou criando um dataset customizado apartir de um retorno de uma API. Essa API esta construída em PHP. O seu retorno esta vindo no seguinte formato:
[{"codprof":"2359","nomeprof":"WENDEL CORTES MARTINS"}]
Quando eu dou um log.dir dentro do Fluig o retorno aparece assim:
"[{\"codprof\":\"2359\",\"nomeprof\":\"WENDEL CORTES MARTINS\"}]" (não sei porque)
Sendo assim eu não estou conseguindo pegar o valor que eu preciso como por exemplo: json.codprof ou json["codprof"] se eu tento da um JSON.parse da erro. Alguém por favor pode me dar uma luz.
Código Completo:
function createDataset(fields, constraints, sortFields) {
var dataset = DatasetBuilder.newDataset();
try{
var clientService = fluigAPI.getAuthorizeClientService();
var data = {
companyId : getValue("WKCompany") + '',
serviceCode : 'APIRM',
endpoint : '/getProf/?cpf=xxxxxxxxxxxx',
method : 'get',
}
var vo = clientService.invoke(JSON.stringify(data));
log.info('dataset vo:' + vo.getResult());
log.dir(vo.getResult());
if(vo.getResult()== null || vo.getResult().isEmpty()){
throw new Exception("Retorno está vazio");
}else{
dataset.addColumn("codprof");
dataset.addColumn("nomeprof");
var json = vo.getResult();
log.info('dataset json: ' + json);
log.dir(json);
json = JSON.parse(json); // Da erro
dataset.addRow([json.codprof, json.nomeprof]);
}
} catch(err) {
throw new Exception(err);
}
return dataset;
}
Qual o Content-Type da resposta? É application/json mesmo? Tente passar
— Diogo Boegershausen 19 de Dec de 2019headers: { Accept: 'application/json' }
no data da sua request para ver se muda alguma coisaTentei.. mas o erro continua
— Laísa Cardoso 19 de Dec de 2019É no parse mesmo que da o erro? Pq como é um array vc acessaria com json[0].codprof
— Diogo Boegershausen 19 de Dec de 2019É assim: quando eu coloco JSON.parse da o seguinte erro no dataset: Erro ao recuperar dados do dataset: Retorno de dataset inválido, verifique sua implementação. Se o eu tiro o JSON.parse não da erro, só que o retorno da dataset fica com o valor: undefined
— Laísa Cardoso 19 de Dec de 2019Podes colocar
— Diogo Boegershausen 19 de Dec de 2019dataset.addRow([err.message, '']);
no lugar do throw que tem no catch pra vrmos qual a excessao que ele está lançando?Fiz conforme disse: o que apareceu foi: SyntaxError: Unexpected token: Coloquei também um log.dir e no arquivo do log apareceu o seguinte erro: default task-32) No serializer found for class sun.org.mozilla.javascript.internal.UniqueTag and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) ) (through reference chain: sun.org.mozilla.javascript.internal.NativeError["prototype"]->sun.org.mozilla.javascript.internal.NativeError["stack"])
— Laísa Cardoso 19 de Dec de 2019Já tive um problema com isto. O retorno vindo do PHP já não veio com json.encode? Se for usado o json encode no php, ele não precisa ser tratado com o JSON.parse. (Estou falando de memória, não estou com o código Javascript com que eu resolvi isto)
— Mausim 27 de Dec de 2019Sim. Vem com json encode do PHP, mas eu não sei porque quando eu uso sem JSON.parse o valor da undefined, não mostra os resultado que eu preciso entende. Por isso eu estou tentando usar o JSON.parse para ver se os resultados aparecem, mas colocando JSON.parse da erro. Sem JSON.parse não da erro, mas também não mostra o conteúdo da váriavel
— Laísa Cardoso 27 de Dec de 2019