[RESOLVIDO] Problemas com $.parseJSON("string") - JQuery + JSON

7 respostas
G
Boa noite a todos, estou com o seguinte problema: Fiz uma requisição via Ajax com auxílio do JQuery e então criei um callback para capturar o resultado e realizar alguns procedimentos anterior a exibição dos resultados. Neste callback eu consigo acessar todos os atributos de um DTO simples (chamado GenericDTO), pois o dto retorna no formato JSON conforme codigos abaixo: GenericDTO:
public class GenericDTO implements Serializable{

	private static final long serialVersionUID = 1L;
	
	private String tituloDialog;
	private String mensagem;
	private String classeImagem;
	private String classeMensagem;
	private String status;
	private String modelo;
	private String listaModelo;
	
	public GenericDTO(){

	}
        //gets e sets
JSON do GenericDTO (resultado da request/response):
({status:"SUCESSO", modelo:"{"cliente.serialVersionUID":"1", "cliente.nomePai":"RONALDO ROSA", "cliente.nomeMae":"MARIA EMxCDLIA", "cliente.serialVersionUID":"1", "cliente.idPessoa":"7", "cliente.nome":"GABRIEL ARAxDAJO GARCIA", "cliente.cpfCnpj":"[telefone removido]", "cliente.rg":"99999999", "cliente.email":"[email removido]", "cliente.telefone":"([telefone removido]", "cliente.celular":"([telefone removido]", "cliente.dataNascimento":"1988-05-18 00:00:00.0", "cliente.endereco.serialVersionUID":"1", "cliente.endereco.idEndereco":"12", "cliente.endereco.cidade":"UBERLxC2NDIA", "cliente.endereco.estado":"MG", "cliente.endereco.logradouro":"RUA TABAJARAS", "cliente.endereco.numero":"994", "cliente.endereco.cep":"99999999", "cliente.endereco.bairro":"SARAIVA", "cliente.endereco":"br.com.app.model.Endereco@2b", "cliente.dataInclusao":"2013-03-08 16:06:05.0", "cliente.tipoPessoa":"PF"}"})

Na requisição ajax meu programa acessa um método java que criei para montar uma "JSON String" a partir dos beans conforme exemplo para o bean de cliente no atributo modelo no JSON do GenericDTO ilustrado acima. Como percebido, esta String é setada no campo modelo do meu DTO e então eu consigo recuperá-la no JSON quando receber a resposta da requisição, conforme código (JavaScript) abaixo:

var JSONStringCliente = resultados.modelo; //sendo que resultados é o nome dado para o json na response, ou seja, a variável resultados é o mesmo JSON ilustrado logo acima
Recuperada a String, utilizo o método $.parseJSON(JSONStringCliente) para transformar minha String em um JSON e então poder acessar as propriedades de cliente conforme o seguinte código:
var json = $.parseJSON(JSONStringCliente);
alert(1);
alert(json.cliente.nome);

A função parseJSON é executada normalmente porém quando tento acessar uma propriedade do JSON obtido tenho o seguinte resultado no console do firebug:

Hora: 16/05/2013 19:03:29
Erro: TypeError: json.cliente is undefined
Arquivo-fonte: http://localhost:8080/app/js/appForm.js
Linha: 131

Alguém sabe me me apontar aonde estou errando? Desde já agradeço pela atenção e ajuda!
PS.: o alert(1) funciona normalmente mostrando que a função parseJSON está funcionando corretamente e quando dou alert em json ele alerta o seguinte conteúdo:

({'cliente.serialVersionUID':"1", 'cliente.nomePai':"RONALDO ROSA", 'cliente.nomeMae':"MARIA EM\xCDLIA", 'cliente.idPessoa':"7", 'cliente.nome':"GABRIEL ARA\xDAJO GARCIA", 'cliente.cpfCnpj':"[telefone removido]", 'cliente.rg':"99999999", 'cliente.email':"[email removido]", 'cliente.telefone':"([telefone removido]", 'cliente.celular':"([telefone removido]", 'cliente.dataNascimento':"1988-05-18 00:00:00.0", 'cliente.endereco.serialVersionUID':"1", 'cliente.endereco.idEndereco':"12", 'cliente.endereco.cidade':"UBERL\xC2NDIA", 'cliente.endereco.estado':"MG", 'cliente.endereco.logradouro':"RUA TABAJARAS", 'cliente.endereco.numero':"994", 'cliente.endereco.cep':"99999999", 'cliente.endereco.bairro':"SARAIVA", 'cliente.endereco':"br.com.meujuridico.model.Endereco@2b", 'cliente.dataInclusao':"2013-03-08 16:06:05.0", 'cliente.tipoPessoa':"PF"})

7 Respostas

G

Ninguêm?

F

Vc não deveria pegar o cliente dentro de “modelo”?
Nunca trabalhei dessa forma com JSon, geralmente insiro o objeto diretamente do JSon. No seu caso, vc não deveria tratar “modelo” como um vetor? Posso estar falando besteira mas é uma tentantiva, acessar o cliente através de:

json.modelo.cliente.nome;
// ou
json.modelo[0].nome;
G

Fabio na verdade eu fiz isto, eu peguei a String no formato JSON do cliente que eu montei do lado do Java e então retornei ela na minha request no campo modelo do meu GenericDTO, este sim retornou um JSON (porém o JSON retornado pelo VRaptor não atende o formato que desejo). Depois peguei a String recuperada e transformei em um JSON utilizando o método parseJSON do jquery, atribuindo o resultado a variável json. Porém não consegui percorrer os campos da variável json e não sei aonde está o meu erro. Eu também pensei que o resultado poderia ser um vetor e por isto havia tratado o resultado do parseJSON como um vetor para fazer o teste, porém não obtive o resultado esperado!

F

Não sei como funciona o método do JQuery mas vc já tentou recuperar o JSon diretamente com o método “eval()” do Javascript? Ex:

var json = eval('(' + textoJson + ')');
G

Na verdade tbm já fiz essa tentativa porém não tive muito sucesso! Eu estou meio perdido aqui tbm, até pq se vc reparar o meu JSON n tem raiz e eu não estou sabendo colocar, pq quando tento colocar ele da problema no método parseJSON.
Estava tentando criar minha String do JSON da seguinte forma (lembrando que essa String é criada no Java e não no JavaScript):

"{ "cliente":"{ "cliente.serialVersionUID":"1", "cliente.nomePai":"RONALDO ROSA", "cliente.nomeMae":"MARIA EMxCDLIA", "cliente.serialVersionUID":"1", "cliente.idPessoa":"7", "cliente.nome":"GABRIEL ARAxDAJO GARCIA", "cliente.cpfCnpj":"[telefone removido]", "cliente.rg":"99999999", "cliente.email":"[email removido]", "cliente.telefone":"([telefone removido]", "cliente.celular":"([telefone removido]", "cliente.dataNascimento":"1988-05-18 00:00:00.0", "cliente.endereco.serialVersionUID":"1", "cliente.endereco.idEndereco":"12", "cliente.endereco.cidade":"UBERLxC2NDIA", "cliente.endereco.estado":"MG", "cliente.endereco.logradouro":"RUA TABAJARAS", "cliente.endereco.numero":"994", "cliente.endereco.cep":"99999999", "cliente.endereco.bairro":"SARAIVA", "cliente.endereco":"br.com.meujuridico.model.Endereco@2b", "cliente.dataInclusao":"2013-03-08 16:06:05.0", "cliente.tipoPessoa":"PF" }" }"

Mas ai da erro de sintaxe: SyntaxError: JSON.parse: expected ‘,’ or ‘}’ after property value in object

F

Como vc está gerando o JSon no java? Está usando a classe JSONObject? Se não estiver tente usar, segue um exemplo abaixo:

public JSONObject testeJSon() {
    JSONObject json = new JSONObject();

    try {
        json.put("success", true); // preencho success para verificar no javascript
        json.put("cliente", cliente); // insiro o cliente (com todos os dados) no JSon para passar para a página jsp
    } catch (JSONException jx) {
        // Excessão gerada pelo JSONObject
    }

Depois disso faço a conversão com o “eval()” como eu disse anteriomente.

G

Não, eu até estava testando com o JSONObject mas a forma que ele montava o json não me atendia, ai criei um método com reflection pra montar pramim a String do JSON. Acabei resolvendo meu problema fazendo o parseJSON e então utilizei um $.each para iterar a String. Não ficou exatamente como eu queria mas vai resolver o meu problema! Obrigado pela ajuda de qualquer forma :smiley:

Criado 16 de maio de 2013
Ultima resposta 20 de mai. de 2013
Respostas 7
Participantes 2