Capturar dados JSON via URL usando Vraptor 3

Boa tarde,

 Gostaria de saber como faço pra imprimir no console ou até mesmo gravar em um banco os dados vindo de uma URL do tipo json, usando o vraptor 3? Mais ou menos assim?...Como eu passo essa função javascript pro vraptor?
<script type="text/javascript">
	
	$.getJSON("http://www.comiteitajai.org.br/alerta/Alerta/json/ultimas.json", function(data){
	     $.each(data.rates, function( cd_estacao, ds_estacao ){
	          console.log( cd_estacao + " " + ds_estacao );    
	     });
	});
	</script>
result.use(json()).withoutRoot().from(FUNCAO JAVASCRIPT).serialize();

Obrigado

não entendi o que vc quer fazer… vc tá dando um getJSON em outro site (isso já não funciona mto bem) e esse site vai retornar a função que vc vai executar?

Acho que não ficou muito claro mesmo!

Então, eu tenho esse link http://www.comiteitajai.org.br/alerta/Alerta/json/ultimas.json que me devolve os dados na tela no formato JSON. Gostaria de armazená-los no banco de dados usando o Vraptor 3. Geralmente faz-se o caminho inverso né, pega-se os dados do banco e e devolve em formato JSON. O que eu gostaria de fazer é uma desserialização.

obrigado

esse json é de outro sistema?

e vc quer fazer isso na página mesmo? por que não no servidor?

sim, é de um cliente. Gostaria de pegar essas dados. Mas to meio perdido. Já li vários tópicos sobre o assunto mas não consegui absorver muita coisa…

cara, o ideal é vc fazer isso a partir do seu servidor mesmo, com algum cliente http qualquer. Daí vc recebe o json e extrai os dados que você quer salvar no seu banco…

o $.getJSON não vai funcionar pois vc não pode fazer uma chamada ajax para outro site, você precisa usar jsonp (veja se esse servidor suporta isso), daí vc teria que transformar o json em dados de formulário e postar para o seu sistema.

Lucas,

Consegui gerar um aquivo.json daquele link.
@Path("/")
	public void index() throws MalformedURLException, IOException {
		InputStream input = null;
		OutputStream output = null;
		try {
		    input = new URL("http://www.comiteitajai.org.br/alerta/Alerta/json/ultimas.json").openStream();
		    output = new FileOutputStream("c:/output.json");
		    byte[] buffer = new byte[1024];
		    for (int length = 0; (length = input.read(buffer)) > 0;) {
		        output.write(buffer, 0, length);
		    }
		    // Here you could append further stuff to `output` if necessary.
		} finally {
		    if (output != null) try { output.close(); } catch (IOException logOrIgnore) {}
		    if (input != null) try { input.close(); } catch (IOException logOrIgnore) {}
		}
	}

Como eu desserializo a partir desse arquivo?

obrigado

use uma biblioteca que faz isso… por exemplo o XStream, ou o GSon.

no caso do XStream (que já é dependência do VRaptor), vc deveria criar classes que representam a estrutura do json, e fazer o seguinte:

-receba um XStreamBuilder no construtor
-faça

[code]
XStream xstream = builder.jsonInstance();
SeuObjeto objeto = xstream.fromXML(input);

eu tento receber um XStreamBuilder ele dá erro, não reconhece. Até baixei o jar xtream-1.4.2.jar mas lá me parece não ter essa classe

seria daqui né http://jtourney.sourceforge.net/javadoc/de/spieleck/app/turn/rendering/XStreamBuilder.html#XStreamBuilder() ???

xstreamBuilder é do VRaptor 3.4.0…

se vc não tem essa versão, é só criar um XStream na mão passando o driver do json.
http://xstream.codehaus.org/json-tutorial.html

Lucas,
Mudei a versão do vraptor p/ 3.4.0 e consegui rodar o cód. No entanto está dando o seguinte erro “Caused by: java.lang.UnsupportedOperationException: The JsonHierarchicalStreamDriver can only write JSON”

@Path("/")
	public void index() throws MalformedURLException, IOException {
		InputStream input = null;
		OutputStream output = null;
		try {
		    input = new URL("http://www.comiteitajai.org.br/alerta/Alerta/json/ultimas.json").openStream();
		    output = new FileOutputStream("c:/output.json");
		    byte[] buffer = new byte[1024];
		    for (int length = 0; (length = input.read(buffer)) > 0;) {
		        output.write(buffer, 0, length);
		    }
		    XStream xstream = new XStream(new JsonHierarchicalStreamDriver());
		    xstream = builder.jsonInstance();
			Itajai itajai = (Itajai) xstream.fromXML(input); //O ERRO ESTÁ NESSA LINHA
			System.out.println(itajai);
		    
		} finally {
		    if (output != null) try { output.close(); } catch (IOException logOrIgnore) {}
		    if (input != null) try { input.close(); } catch (IOException logOrIgnore) {}
		}
	}

obrigado

precisa trocar o JsonHierarchical pelo JettisonMappedXmlDriver (tá no tutorial que eu te passei).

obrigado Lucas,

tava faltando um jar.

Bom acabei usando no final Gson…

segue o cód pra quem precisar

public List<Itajai> getDataJSON() throws IOException{
		
		
		InputStream input = null;
		OutputStream output = null;


		input = new URL("http://www.comiteitajai.org.br/alerta/Alerta/json/ultimas.json").openStream(); 
		output = new FileOutputStream("c:/saida.json");
		byte[] buffer = new byte[1024]; 
			
		for (int length = 0; (length = input.read(buffer)) > 0;) {
			output.write(buffer, 0, length);
		}
		
		Gson g = new Gson();
		List<Itajai> details = null;
		
		try {
			BufferedReader in = new BufferedReader(new FileReader("c:\\saida.json"));
			String str = null;
			
			while (in.ready()) {
				str = in.readLine();

				Type collectionType = new TypeToken<List<Itajai>>(){}.getType();
				details = g.fromJson(str, collectionType);

				for(int i=0; i<details.size(); i++){
					System.out.println("Lista: "+details.get(i).toString());
				}
			}
			
			in.close();
			
		} catch (IOException e) {
		}
		return details;
	}