Json [resolvido]

8 respostas
M

Amigos tenho a seguinte resposta.

"results" : [
      {
         "address_components" : [
            {
               "long_name" : "1",
               "short_name" : "1",
               "types" : [ "street_number" ]
            },
            {
               "long_name" : "Avenida Rio Branco",
               "short_name" : "Avenida Rio Branco",
               "types" : [ "route" ]
            },
            {
               "long_name" : "Centro",
               "short_name" : "Centro",
               "types" : [ "sublocality", "political" ]
            },
            {
               "long_name" : "Rio de Janeiro",
               "short_name" : "Rio de Janeiro",
               "types" : [ "locality", "political" ]
            },
            {
               "long_name" : "Rio de Janeiro",
               "short_name" : "RJ",
               "types" : [ "administrative_area_level_1", "political" ]
            },
            {
               "long_name" : "Brazil",
               "short_name" : "BR",
               "types" : [ "country", "political" ]
            },
            {
               "long_name" : "20090-003",
               "short_name" : "20090-003",
               "types" : [ "postal_code" ]
            }
         ],
         "formatted_address" : "Avenida Rio Branco, 1 - Centro, Rio de Janeiro, 20090-003, Brazil",
         "geometry" : {
            "bounds" : {
               "northeast" : {
                  "lat" : -22.89716040,
                  "lng" : -43.18043560
               },
               "southwest" : {
                  "lat" : -22.89779040,
                  "lng" : -43.18059060
               }
            },
            "location" : {
               "lat" : -22.89747160,
               "lng" : -43.18049509999999
            },
            "location_type" : "RANGE_INTERPOLATED",
            "viewport" : {
               "northeast" : {
                  "lat" : -22.89612641970850,
                  "lng" : -43.17916411970850
               },
               "southwest" : {
                  "lat" : -22.89882438029151,
                  "lng" : -43.18186208029149
               }
            }
         },
         "types" : [ "street_address" ]
      },
      {
         "address_components" : [
            {
               "long_name" : "Avenida Rio Branco próximo ao 127",
               "short_name" : "Avenida Rio Branco próximo ao 127",
               "types" : [ "bus_station", "transit_station", "establishment" ]
            },
            {
               "long_name" : "Centro",
               "short_name" : "Centro",
               "types" : [ "sublocality", "political" ]
            },
            {
               "long_name" : "Rio de Janeiro",
               "short_name" : "Rio de Janeiro",
               "types" : [ "locality", "political" ]
            },
            {
               "long_name" : "Rio de Janeiro",
               "short_name" : "RJ",
               "types" : [ "administrative_area_level_1", "political" ]
            },
            {
               "long_name" : "Brazil",
               "short_name" : "BR",
               "types" : [ "country", "political" ]
            }
         ],
         "

Estou tentando pegar o campo “long_name” mas o que esta errado ?

ou estou errado ?

JSONObject object;
			try {
				
				object = new JSONObject(pagina);
				JSONObject location = object.getJSONObject("results");
				String endereco = location.getString("long_name");
				
				System.out.println("??????= "+endereco);
			} catch (JSONException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}

8 Respostas

M

Acho que vc teria que pegar primeiro o address_components e depois o long_name

M
[quote]JSONObject["address_components"] not found. at org.json.JSONObject.get(Unknown Source) at org.json.JSONObject.getJSONObject(Unknown Source)
Poise eu fiz mas continua
object = new JSONObject(pagina); JSONObject location = object.getJSONObject("address_components"); String endereco = location.getString("long_name"); [code]
M

Cara vc tem que ir andando no objeto, eu uso a lib do google para Json, nao sei qual vc usa, mas segue o exemplo que fiz e rodei no seu json

FileReader fr = new FileReader(new File("c:/teste/json.txt"));
		JsonParser jp = new JsonParser();
		JsonObject jo = (JsonObject) jp.parse(fr);
		
		JsonArray array = jo.get("results").getAsJsonArray();
		for(int i = 0; i < array.size(); i++) {
			JsonObject jso = (JsonObject) array.get(i);
			JsonArray array2 = jso.get("address_components").getAsJsonArray();
			for(int j = 0; j < array2.size(); j++) {
				JsonObject jso2 = (JsonObject) array2.get(j);
				System.out.println(jso2.get("long_name"));
			}
		}

	}

a saida no console foi:
"1"
"AvenidaRioBranco"

a lib do google fica em
http://code.google.com/p/google-gson/

[]'s

M

amigo não teria como nos falarmos pelo skype ou msn ?

Só falta eu mostrar o endereço e a aplicação já esta pronta.

qual é a lib que voce esta usado ?

O problema é o cliente me ligar de 5 em 5 minutos para perguntar se esta pronto.

se puder agradeço

derrepete dando uma olhada

skype marciofermino msn [email removido]

M

opa deu cerro !!!

olha ai

//FileReader fr = new FileReader(new File("c:/teste/json.txt"));
		JsonParser jp = new JsonParser();
		JsonObject jo = (JsonObject) jp.parse(pagina);
		
		JsonArray array = jo.get("results").getAsJsonArray();
		for(int i = 0; i < array.size(); i++) {
			JsonObject jso = (JsonObject) array.get(i);
			JsonArray array2 = jso.get("address_components").getAsJsonArray();
			for(int j = 0; j < array2.size(); j++) {
				JsonObject jso2 = (JsonObject) array2.get(j);
				System.out.println(jso2.get("long_name"));
			}
		}

o que me retornou

"northeast" : "1" "Avenida Rio Branco" "Centro" "Rio de Janeiro" "Rio de Janeiro" "Brazil" "20090-003" "Avenida Rio Branco próximo ao 127" "Centro" "Rio de Janeiro" "Rio de Janeiro" "Brazil" "20090-000" "Rio de Janeiro" "Rio de Janeiro" "Brazil" "20090-003" "Rio de Janeiro" "Rio de Janeiro" "Brazil" "20090-030" "Rio de Janeiro"

agora uma dúvida porque tantos resultados uma coordenada x,y nao seria aprenas uma registro ?,

B
JSONObject object;

List<String> enderecos = new ArrayList<>();

try {

  object = new JSONObject(pagina);
  JSONArray array = object.getJSONArray("results");

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

    JSONObject result = array.getJSONObject(i);
    JSONArray addressComponents = result.getJSONArray("address_components");

    for (int j = 0; j < addressComponents.length(); j++) {

      JSONObject address = addressComponents.getJSONObject(j);
      String longName = address.getString("long_name");
      enderecos.add(longName);
    }
  }

  System.out.println("Endereços: " + enderecos);
}

Particularmente eu acho JSONObject muito chato de trabalhar. Prefiro o Jersey + Jackson

http://www.mkyong.com/webservices/jax-rs/json-example-with-jersey-jackson/
http://www.mkyong.com/webservices/jax-rs/restful-java-client-with-jersey-client/

Edit: Postei atrasado, o teu código está melhor que o meu.

B

O motivo de retornar tantos resultados talvez seja por que a latitute e longitude não seja especifica o bastante, aí ele tentar retornar tudo que tem em volta dessa área.

M

entendi

bem vou tentar sempre pegar as 4 linhas, pelo menos fica padrao

Criado 25 de fevereiro de 2013
Ultima resposta 25 de fev. de 2013
Respostas 8
Participantes 3