Problema com JSONArray

23 respostas
R
Galera bom dia.

Estou com problema para converter valores que vem no formato json, estou usando um JSONArray e da erro de conversão.

O meu json vem assim:  [ {a:[],b:[], c: [], d: [] }

Dentro de cada objeto (a,b,c,d) tem outros objetos ,

[ {a:[{n:blabla,a:123456,b:jfdfj,c:jdaçkdlç }],b:[{n:blabla,a:123456,b:jfdfj,c:jdaçkdlç }], c: [{n:blabla,a:123456,b:jfdfj,c:jdaçkdlç }], d: [{n:blabla,a:123456,b:jfdfj,c:jdaçkdlç }] }

Trocando para português ,tenho um grupo com subgrupos , ou uma lista com sublistas.
Na hora que eu uso um for para percorrer os objetos lança uma exception de conversão na letra b que e a segunda sublista.
Alguem pode me ajudar, ou informar outra forma de retirar os valores deste formato e depois pegar os valores dos valores retirados.
Obrigado

23 Respostas

W

O seu JSON object eh invalido. Para fazer o teste va ate http://jsonlint.com/

Copie o seu json no textarea e clique validate.

Corrigi para voce:

[
    {
        "a": [
            {
                "n": "blabla",
                "a": 123456,
                "b": "jfdfj",
                "c": "jdaçkdlç"
            }
        ],
        "b": [
            {
                "n": "blabla",
                "a": 123456,
                "b": "jfdfj",
                "c": "jdaçkdlç"
            }
        ],
        "c": [
            {
                "n": "blabla",
                "a": 123456,
                "b": "jfdfj",
                "c": "jdaçkdlç"
            }
        ],
        "d": [
            {
                "n": "blabla",
                "a": 123456,
                "b": "jfdfj",
                "c": "jdaçkdlç"
            }
        ]
    }
]

//Daniel

R

Validei e passou segue ele:
[ code

{

a: [

{

n: “”,

a: 38874,

b: djm,

c: Ricardo Almeida,

e: Em atendimento,

f: 03/12/2012 17:37,

g: 27/11/2012 14:37,

i: Inmov,

k: /Shared/Images/no_photo.jpg,

l: null,

m: null

},

{

n: “”,

a: 38866,

b: Teste,

c: Ricardo Almeida,

e: Em atendimento,

f: 03/12/2012 15:19,

g: 27/11/2012 12:19,

i: Inmov,

k: /Shared/Images/no_photo.jpg,

l: null,

m: null

},

{

n: “”,

a: 38860,

b: Chegada ao local de serviço,

c: Ricardo Almeida,

e: Em atendimento,

f: 03/12/2012 14:36,

g: 27/11/2012 11:36,

i: Inmov,

k: /Shared/Images/no_photo.jpg,

l: null,

m: null

},

{

n: “”,

a: 38856,

b: Fim de Trânsito,

c: Ricardo Almeida,

e: Em atendimento,

f: 29/11/2012 18:00,

g: 27/11/2012 08:31,

i: Inmov,

k: /Shared/Images/no_photo.jpg,

l: null,

m: null

},

{

n: “”,

a: 38854,

b: Chegada ao local de serviço,

c: Ricardo Almeida,

e: Em atendimento,

f: 29/11/2012 17:40,

g: 26/11/2012 17:50,

i: Inmov,

k: /Shared/Images/no_photo.jpg,

l: null,

m: null

}

],

b: [

{

n: “”,

a: 38867,

b: 2tttttffttrttttgg ygghhg ft yg gugu hgvguhgg y uh hhhg ugvcf hhh ygghuggg ugbvhuh h fc jj gvvhgvghhh hhhhggg ygvvgg gt uggghuhg hbnjgh uhhjhg ugyghbj hb hong,

c: Ricardo Almeida,

e: Em atendimento,

f: 03/12/2012 15:21,

g: 27/11/2012 12:21,

i: Inmov,

k: /Shared/Images/no_photo.jpg,

l: null,

m: null

},

{

n: “”,

a: 38863,

b: Teste,

c: Ricardo Almeida,

e: Em atendimento,

f: 03/12/2012 14:59,

g: 27/11/2012 11:59,

i: Inmov,

k: /Shared/Images/no_photo.jpg,

l: null,

m: null

},

{

n: “”,

a: 38864,

b: Tesye,

c: Ricardo Almeida,

e: Em atendimento,

f: 03/12/2012 14:59,

g: 27/11/2012 11:59,

i: Inmov,

k: /Shared/Images/no_photo.jpg,

l: null,

m: null

},

{

n: “”,

a: 38862,

b: Teste,

c: Ricardo Almeida,

e: Em atendimento,

f: 03/12/2012 14:57,

g: 27/11/2012 11:57,

i: Inmov,

k: /Shared/Images/no_photo.jpg,

l: null,

m: null

}

],

c: [],

d: []

}

}

R

Como retiro os valores deste cara ?

W

ricardo batista almeida:
Como retiro os valores deste cara ?

Como assim ??

R

Tenho que retirar os o bjetos e depois pegar os subobjetos.
então :

[code

JSONArray jsonArray = new JSONArray(getJson);

for(int i =0 ;i <jsonArray.length();i++){

if (jsonArray .getString(a) != null){

// guarda em um array ou outro json	

else if(jsonArray .getString(b) != null){

// guarda em um array ou outro json	

}

else if(jsonArray .getString(c) != null){

// guarda em um array ou outro json	

}

else if(jsonArray .getString(d) != null){

// guarda em um array ou outro json	

}

}

]
fiz assim mais da erro quando pega o valor b.>

D

Oi amigo, da uma olhada nesse tutorial onde antunes mostra em 3 artigos como consumir um json

http://www.portalandroid.org/comunidade/viewtopic.php?f=7&t=17465

espero que ajude.

W

Meu, eu nao tenho muito experiencia com isso, mas pela logica:

  1. O seu JSON nao eh um array, eh um objeto que contain arrays, entao vc nao pode fazer:
JSONArray jsonArray = new JSONArray(getJson);

O mais indicado seria…

JSONObject jo = new JSONObject(getJson);
  1. “a”, “c”, “d” sao arrays e voce esta usando getString() ???

Acho que o correto seria:

JSONArray array1= jo.getJSONArray("a"); 
JSONArray array2= jo.getJSONArray("b"); 
JSONArray array3= jo.getJSONArray("c"); 
JSONArray array4= jo.getJSONArray("d");

Achei esse exemplo interessante:

JSONObject obj = new JSONObject("{interests : [{interestKey:Dogs}, {interestKey:Cats}]}");

List<String> list = new ArrayList<String>();
JSONArray array = obj.getJSONArray("interests");
for(int i = 0 ; i < array.length() ; i++){
    list.add(array.getJSONObject(i).getString("interestKey"));
}

Fonte: http://stackoverflow.com/questions/5015844/parsing-json-object-in-java

D

windsofhell:

Corrigi para voce:

[
    {
        "a": [
            {
                "n": "blabla",
                "a": 123456,
                "b": "jfdfj",
                "c": "jdaçkdlç"
            }
        ],
        "b": [
            {
                "n": "blabla",
                "a": 123456,
                "b": "jfdfj",
                "c": "jdaçkdlç"
            }
        ],
        "c": [
            {
                "n": "blabla",
                "a": 123456,
                "b": "jfdfj",
                "c": "jdaçkdlç"
            }
        ],
        "d": [
            {
                "n": "blabla",
                "a": 123456,
                "b": "jfdfj",
                "c": "jdaçkdlç"
            }
        ]
    }
]

//Daniel

Tambem nao manjo muito, mas repare que o json dele começa com um “[” e termina com um “]”, isso pra mim é um array de json :D, por favor me corrija se eu estiver errado ^^

W

douglascst90:
windsofhell:

Corrigi para voce:

[
    {
        "a": [
            {
                "n": "blabla",
                "a": 123456,
                "b": "jfdfj",
                "c": "jdaçkdlç"
            }
        ],
        "b": [
            {
                "n": "blabla",
                "a": 123456,
                "b": "jfdfj",
                "c": "jdaçkdlç"
            }
        ],
        "c": [
            {
                "n": "blabla",
                "a": 123456,
                "b": "jfdfj",
                "c": "jdaçkdlç"
            }
        ],
        "d": [
            {
                "n": "blabla",
                "a": 123456,
                "b": "jfdfj",
                "c": "jdaçkdlç"
            }
        ]
    }
]

//Daniel

Tambem nao manjo muito, mas repare que o json dele começa com um “[” e termina com um “]”, isso pra mim é um array de json :D, por favor me corrija se eu estiver errado ^^


Sim, nesse exemplo eh um array.

Mas no codigo que ele testou no json eh:

{ 
"a": [ 
{ 
"n": "", 
"a": 38874, 
"b": "djm", 
"c": "Ricardo Almeida", 
"e": "Em atendimento", 
"f": "03/12/2012 17:37", 
"g": "27/11/2012 14:37", 
"i": "Inmov", 
"k": "/Shared/Images/no_photo.jpg", 
"l": null, 
"m": null 
}, 
{ 
"n": "", 
"a": 38866, 
"b": "Teste", 
"c": "Ricardo Almeida", 
"e": "Em atendimento", 
"f": "03/12/2012 15:19", 
"g": "27/11/2012 12:19", 
"i": "Inmov", 
"k": "/Shared/Images/no_photo.jpg", 
"l": null, 
"m": null 
},
...

Esse eh um objeto e as propriedades do objeto sao arrays.

D

Uuuuuum vlw mano ehhehe, mas agora estou em duvida aqui no w3schools ele mostra um json object e um json array e o do nosso amigo tem a msm estrutura do json array aki http://www.w3schools.com/json/json_syntax.asp

W

JSON arrays sao escritos dentro de [ ] (nao sei como eh square brackets em Portugues).

No exemplo, tem um { primeiro, porque eh uma boa pratica sempre iniciar o objeto dessa maneira.

Nao eh errado escrever por exemplo:

[
    {
        "a": "blablabla"
    },
    {
        "a": "blablabla"
    }
]

Acho que tudo depende do que vc quer fazer tambem, especificar nomes, pode facilitar a leitura do json tambem, e facilitar o codigo que le e escreve json.
Por exemplo, eu prefiro fazer :

{
    "estudantes": [
        {
            "nome": "blablabla",
            "telefone": 999999999
        },
        {
            "nome": "blablabla",
            "telefone": 999999999
        },
        {
            "nome": "blablabla",
            "telefone": 999999999
        },
        {
            "nome": "blablabla",
            "telefone": 999999999
        }
    ]
}

Do que:

[
    {
        "nome": "blablabla",
        "telefone": 999999999
    },
    {
        "nome": "blablabla",
        "telefone": 999999999
    },
    {
        "nome": "blablabla",
        "telefone": 999999999
    },
    {
        "nome": "blablabla",
        "telefone": 999999999
    }
]

Mesmo que as duas semanticas estejam corretas.

D

square brackets: acho que é conchetes. hehehe

Nesse linck http://www.devmedia.com.br/introducao-ao-formato-json/25275 ele explica como é um Json Object no item 8, que é parecido com o do ricardo, um objeto com um array como vc disse windsofhell, hehehe é isso ai msm. :smiley:

R

Copnsegui pegar usando JSONObject blz.
Mais da erro de conversão quando no campo tem a seguinte informação por exemplo “g”: "27/11/2012 14:37
ai ele converte colocando mais uma barra fica assim “g”: "27/11/2012 14:37
Alguém dabe por que ?

D

posta seu trecho do codigo pra gente ver como vc esta fazendo

R

[code

JSONArray jsonArray = new JSONArray(dao.getTaskTeste(codigoUSer));

for (int i = 0; i &lt; jsonArray.length(); i++) {	
		JSONObject jsonObject = jsonArray.getJSONObject(i);
		if(jsonObject.getString("a").toString() != null){
			JSONArray	js1 = new JSONArray(jsonObject.getString("a").toString());
		}else if (jsonObject.getString("b").toString() != null){
			JSONArray	js2 = new JSONArray(jsonObject.getString("b").toString());
		
		}else if (jsonObject.getString("c").toString() != null){
			JSONArray	js3 = new JSONArray(jsonObject.getString("c").toString());			
	  }else {
		JSONArray	js4 = new JSONArray(jsonObject.getString("d").toString());
	}

]
o erro esta em todo campo que é data ele coloca mais uma barra ou seja se no campo esta assim 22/12/2012 ele monta assim 22/12/2012

R

esses smile ai no codigo é getString

D

para postar codigo faça assim:

Use a tag [code] com seu codigo fora depois feche, como seu html :D

D
JSONArray jsonArray = new JSONArray(dao.getTaskTeste(codigoUSer)); 

for (int i = 0; i < jsonArray.length(); i++) {	
JSONObject jsonObject = jsonArray.getJSONObject(i); 
if(jsonObject.getString("a".toString() != null){ 
JSONArray	js1 = new JSONArray(jsonObject.getString("a".toString()); 
}else if (jsonObject.getString("b".toString() != null){ 
JSONArray	js2 = new JSONArray(jsonObject.getString("b".toString()); 

}else if (jsonObject.getString("c".toString() != null){ 
JSONArray	js3 = new JSONArray(jsonObject.getString("c".toString());	
}else { 
JSONArray	js4 = new JSONArray(jsonObject.getString("d".toString()); 
}
D

Tente fazer dessa seguinte forma amigo:

public ArrayList<Historico> buscarHistorico() throws Exception{

		String[] resposta = new WebServiceAgua().get(URL_HISTORICO + "buscarHistorico" // aqui é a sua URL do WebService ); 
		
		ArrayList<Historico> listaHistorico = new ArrayList<Historico>();
		
		if(resposta[0].equals("200")){
			
			Gson gson = new Gson();
			
			JsonParser parser = new JsonParser();
			JsonArray array = parser.parse(resposta[1]).getAsJsonArray();
			
			for (int i = 0; i < array.size(); i++) {
				listaHistorico.add(gson.fromJson(array.get(i), Historico.class));
			}
		}else {
			throw new Exception(resposta[1]);
		}
		
		return listaHistorico;
		
	}

Aqui é o meu metodo GET da classe WebService Agua.

public final String[] get(String url) {

	     String[] result = new String[2];
	     HttpGet httpget = new HttpGet(url);
	     HttpResponse response;

	     try {
	         
	    	 response = HttpClientSingleton.getHttpClientInstace().execute(httpget);
	         HttpEntity entity = response.getEntity();

	         if (entity != null) {
	             result[0] = String.valueOf(response.getStatusLine().getStatusCode());
	             InputStream instream = entity.getContent();
	             result[1] = toString(instream);
	             instream.close();
	             
	             Log.i("get", "Result from post JsonPost : " + result[0] + " : " + result[1]);
	         }
	     } catch (Exception e) {
	         Log.e("NGVL", "Falha ao acessar Web service", e);
	         result[0] = "0";
	         result[1] = "Falha de rede!";
	     }
	     return result;
	    }
R

Esse exemplo é o que eu fiz, o problema esta na conversão da data que ele coloca mais uma barra nas datas, alguém sabe por que ou tem outra forma de converter ?

R

eu tenho serviço pronto ,esta chegando corretamente confrome exemplo abaixo

{ "a": [ { "n": "", "a": 38874, "b": "djm", "c": "Ricardo Almeida", "e": "Em atendimento", "f": "03/12/2012 17:37", "g": "27/11/2012 14:37", "i": "Inmov", "k": "/Shared/Images/no_photo.jpg", "l": null, "m": null }, { "n": "", "a": 38866, "b": "Teste", "c": "Ricardo Almeida", "e": "Em atendimento", "f": "03/12/2012 15:19", "g": "27/11/2012 12:19", "i": "Inmov", "k": "/Shared/Images/no_photo.jpg", "l": null, "m": null }, { "n": "", "a": 38860, "b": "Chegada ao local de serviço", "c": "Ricardo Almeida", "e": "Em atendimento", "f": "03/12/2012 14:36", "g": "27/11/2012 11:36", "i": "Inmov", "k": "/Shared/Images/no_photo.jpg", "l": null, "m": null }, { "n": "", "a": 38856, "b": "Fim de Trânsito", "c": "Ricardo Almeida", "e": "Em atendimento", "f": "29/11/2012 18:00", "g": "27/11/2012 08:31", "i": "Inmov", "k": "/Shared/Images/no_photo.jpg", "l": null, "m": null }, { "n": "", "a": 38854, "b": "Chegada ao local de serviço", "c": "Ricardo Almeida", "e": "Em atendimento", "f": "29/11/2012 17:40", "g": "26/11/2012 17:50", "i": "Inmov", "k": "/Shared/Images/no_photo.jpg", "l": null, "m": null } ], "b": [ { "n": "", "a": 38867, "b": "2tttttffttrttttgg ygghhg ft yg gugu hgvguhgg y uh hhhg ugvcf hhh ygghuggg ugbvhuh h fc jj gvvhgvghhh hhhhggg ygvvgg gt uggghuhg hbnjgh uhhjhg ugyghbj hb hong", "c": "Ricardo Almeida", "e": "Em atendimento", "f": "03/12/2012 15:21", "g": "27/11/2012 12:21", "i": "Inmov", "k": "/Shared/Images/no_photo.jpg", "l": null, "m": null }, { "n": "", "a": 38863, "b": "Teste", "c": "Ricardo Almeida", "e": "Em atendimento", "f": "03/12/2012 14:59", "g": "27/11/2012 11:59", "i": "Inmov", "k": "/Shared/Images/no_photo.jpg", "l": null, "m": null }, { "n": "", "a": 38864, "b": "Tesye", "c": "Ricardo Almeida", "e": "Em atendimento", "f": "03/12/2012 14:59", "g": "27/11/2012 11:59", "i": "Inmov", "k": "/Shared/Images/no_photo.jpg", "l": null, "m": null }, { "n": "", "a": 38862, "b": "Teste", "c": "Ricardo Almeida", "e": "Em atendimento", "f": "03/12/2012 14:57", "g": "27/11/2012 11:57", "i": "Inmov", "k": "/Shared/Images/no_photo.jpg", "l": null, "m": null } ], "c": [], "d": [] }

O erro esta quando o JSONArray converte, ele coloca mais uma barra na data, alguémdabe por que ?

D

olha nao sei como e porque isso ta acontecendo, nao conheço muito, mas da pra fazer uma adaptação tecnologica(gambiarra) rsrs, pega essa data em formata string e da um replaceAll:

String data = "27/\08/\1990";  
  
data = data.replaceAll("/", "");

Caso vc esteja sem muito tempo pra pesquisar, acho que seria uma "solução" eficaz ate o momento.

R

O problema estava no arquivo json.

Criado 20 de dezembro de 2012
Ultima resposta 28 de jan. de 2013
Respostas 23
Participantes 3