Recuperar JSON com vários niveis

Será que alguem poderia me dar uma ajudinha e me mostrar como faço para ler o JSON exibido logo abaixo? Segue:

JSON:

{"contatos":[{
    "nome": "Jose",
    "tipo": "Parente",
    "endereco": {
        "logradouro": "Av. da Felicidade",
        "cidade": "Feliz",
        "estado": "FL",
        "cep": 98654123
    },
    "telefones": [
        {
            "tipo": "casa",
            "numero": "32324455"
        },
        {
            "tipo": "celular",
            "numero": "88554477"
        }
    ]
}
]
}

A minha duvida é somente como identificar os varios niveis no mesmo. Estou conseguindo pegar o primeiro nivel (contatos/nome), mas já o restante não, principalmente o nivel dos “telefones”.

Parte do código que funciona:

JSONObject json = new JSONObject(responseBody);
JSONArray jArray = json.getJSONArray("contatos");
    
for (int i = 0; i < jArray.length(); i++) {
                    
    JSONObject e = jArray.getJSONObject(i);
                    
    String stringJsonNome = e.getString("nome");
    String stringJsonTipo = e.getString("tipo");
    ...

Daí pra frente me perco todo.

Grato a todos e aguardo qualquer orientação.

Boa Tarde velho, então o seu problema é mais um problema de lógica do que propriamente de android, o negócio é o seguinte vc vai ter que implementar uma lógica para percorrer os campos, dois laços for acredito que sejam o suficiente.

Vou te dar uma ajuda, mas não sei se isso é oq vc quer!

Em JSON cada “{” é um objeto e cada “[” um array e nome entre “” é uma chave.

Então vai ficar algo assim {“list”:[{“pessoa”:[{“id”:1, …}]

	public String toJSON(List<Pessoa> Pessoa) {
		try {
			JSONStringer jsonStringer = new JSONStringer();
			jsonStringer.object().key("list").array().object().key("pessoa")
					.array();

			for (Pessoa Pessoa : pessoas) {
				jsonStringer.object().key("id").value(pessoa.getId())
						.key("nome").value(pessoa.getNome()).key("telefone")
						.value(pessoa.getTelefone()).key("endereco")
						.value(pessoa.getEndereco()).key("site")
						.value(pessoa.getSite()).endObject();

			}
			
			return jsonStringer.endArray().endObject().endArray().endObject()
					.toString();

		} catch (JSONException e) {
			throw new RuntimeException(e);
		}

Esse método retornará algo como:

{
   "list": [
         {
              "pessoa":[
                    {
                           "id":1,
                           "nome":"Lucas", 
                           "telefone": "1155544525",
                           "endereco": "Rua pequena, 3154",
                           "site": "lucasdantas.com.br"
                     },
                     {
                            "id":2,
                             ...
                             ...
                     }
               ]
          }
    ]
}

Para ler um json, bastar usar o JSONObject

JSONObject objectPessoa = new JSONObject(dado);

long id = objectPessoa.getLong("id")
String nome = objectPessoa.getString("nome")

Tomara que isso consiga te ajudar a terminar seu projeto"!!

Isso eu sei!

O problema é que não estou conseguindo colocar a “lógica” em prática nesse exemplo aí.

Grato pela sua atenção.

[quote=luckdantas]Vou te dar uma ajuda, mas não sei se isso é oq vc quer!

Em JSON cada “{” é um objeto e cada “[” um array e nome entre “” é uma chave.

Então vai ficar algo assim {“list”:[{“pessoa”:[{“id”:1, …}]

	public String toJSON(List<Pessoa> Pessoa) {
		try {
			JSONStringer jsonStringer = new JSONStringer();
			jsonStringer.object().key("list").array().object().key("pessoa")
					.array();

			for (Pessoa Pessoa : pessoas) {
				jsonStringer.object().key("id").value(pessoa.getId())
						.key("nome").value(pessoa.getNome()).key("telefone")
						.value(pessoa.getTelefone()).key("endereco")
						.value(pessoa.getEndereco()).key("site")
						.value(pessoa.getSite()).endObject();

			}
			
			return jsonStringer.endArray().endObject().endArray().endObject()
					.toString();

		} catch (JSONException e) {
			throw new RuntimeException(e);
		}

Esse método retornará algo como:

{
   "list": [
         {
              "pessoa":[
                    {
                           "id":1,
                           "nome":"Lucas", 
                           "telefone": "1155544525",
                           "endereco": "Rua pequena, 3154",
                           "site": "lucasdantas.com.br"
                     },
                     {
                            "id":2,
                             ...
                             ...
                     }
               ]
          }
    ]
}

Para ler um json, bastar usar o JSONObject

JSONObject objectPessoa = new JSONObject(dado);

long id = objectPessoa.getLong("id")
String nome = objectPessoa.getString("nome")

Tomara que isso consiga te ajudar a terminar seu projeto"!![/quote]

Olá,

Eu sei como a coisa funciona em termos gerais. Para um JSON de “um nivel” eu me dou bem, mas no caso desse aí que tem mais um “segundo nivel” (telefones) me atrapalho todo, ou seja, não consigo “localizar” os “nodes” e conseguentemente extrair os dados necessarios.

Penso que seu exemplo me ajudará bastante.

Grato pela sua valiosa atenção.