Json [resolvido]

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();
			}

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

[quote]JSONObject[“address_components”] not found.
at org.json.JSONObject.get(Unknown Source)
at org.json.JSONObject.getJSONObject(Unknown Source)[code]

Poise eu fiz mas continua

[/code]object = new JSONObject(pagina);
JSONObject location = object.getJSONObject(“address_components”);
String endereco = location.getString(“long_name”);
[code]

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

[code]
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"));
		}
	}

}[/code]

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

a lib do google fica em

[]'s

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 marciofermino2003@homtail.com

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 ?,

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.

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.

entendi

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