Come utilizzare JSON in Java

di il
9 risposte

Come utilizzare JSON in Java

Scusate ragazzi vorrei sapere come posso utilizzare un file json in java, in particolare dovrei accedere ad una chiave di un valore dove è presente un url, e da quel url dovrei scaricare un dataset csv. Il json dovrei prenderlo direttamente da un link.

9 Risposte

  • Re: Come utilizzare JSON in Java

    nclmr ha scritto:


    Scusate ragazzi vorrei sapere come posso utilizzare un file json in java, in particolare dovrei accedere ad una chiave di un valore dove è presente un url, e da quel url dovrei scaricare un dataset csv. Il json dovrei prenderlo direttamente da un link.
    La questione della gestione di documenti JSON in Java è abbastanza ampia, perché non c'è un solo modo. Esistono svariate librerie/API per gestire i JSON. Più o meno complesse e con potenzialità anche ben differenti.

    E dipende anche da cosa sai e hai tu a disposizione? Usi un IDE? Puoi usare anche un sistema di build come Apache Maven?

    Inoltre: il documento JSON che vuoi gestire è molto o poco complesso come struttura? Puoi mostrare un esempio?
  • Re: Come utilizzare JSON in Java

    andbin ha scritto:


    nclmr ha scritto:


    Scusate ragazzi vorrei sapere come posso utilizzare un file json in java, in particolare dovrei accedere ad una chiave di un valore dove è presente un url, e da quel url dovrei scaricare un dataset csv. Il json dovrei prenderlo direttamente da un link.
    La questione della gestione di documenti JSON in Java è abbastanza ampia, perché non c'è un solo modo. Esistono svariate librerie/API per gestire i JSON. Più o meno complesse e con potenzialità anche ben differenti.

    E dipende anche da cosa sai e hai tu a disposizione? Usi un IDE? Puoi usare anche un sistema di build come Apache Maven?

    Inoltre: il documento JSON che vuoi gestire è molto o poco complesso come struttura? Puoi mostrare un esempio?
    Praticamente vi è un oggetto JSON dove dovrei accedere ad un vettore, nel vettore ci sono molti campi uno dei quali è l'url dove devo scaricare il database, il file JSON è un file che devo prendere da chrome. Più in generale esiste una guida per il JSON in java?
  • Re: Come utilizzare JSON in Java

    nclmr ha scritto:


    Più in generale esiste una guida per il JSON in java?
    Puoi sicuramente trovare articoli e tutorial vari in rete. Non credo esista una guida "unica" a JSON in Java, dato che come ho detto esistono SVARIATE librerie/API per maneggiare JSON con vari approcci.

    nclmr ha scritto:


    Praticamente vi è un oggetto JSON dove dovrei accedere ad un vettore, nel vettore ci sono molti campi uno dei quali è l'url dove devo scaricare il database, il file JSON è un file che devo prendere da chrome.
    Se mostrassi un esempio ... sarebbe più utile. Senza vedere cosa devi maneggiare non saprei nemmeno quale libreria consigliarti.
  • Re: Come utilizzare JSON in Java

    andbin ha scritto:


    nclmr ha scritto:


    Più in generale esiste una guida per il JSON in java?
    Puoi sicuramente trovare articoli e tutorial vari in rete. Non credo esista una guida "unica" a JSON in Java, dato che come ho detto esistono SVARIATE librerie/API per maneggiare JSON con vari approcci.

    nclmr ha scritto:


    Praticamente vi è un oggetto JSON dove dovrei accedere ad un vettore, nel vettore ci sono molti campi uno dei quali è l'url dove devo scaricare il database, il file JSON è un file che devo prendere da chrome.
    Se mostrassi un esempio ... sarebbe più utile. Senza vedere cosa devi maneggiare non saprei nemmeno quale libreria consigliarti.
    Guarda, siccome è un progetto da consegnare non vorrei che venga presa come una richiesta per non farlo, il prof ci ha consegnato un link dove vi è un file json, poi con java dobbiamo accedere ad esso e scaricare il database, non so se sia corretto pubblicarlo il json.
  • Re: Come utilizzare JSON in Java

    nclmr ha scritto:


    non so se sia corretto pubblicarlo il json.
    Se non vuoi/non puoi pubblicare qui quel json, ok, nessun problema.
    Posta almeno un pezzetto (che si capisca la struttura) e con dati anche farlocchi che vuoi tu. Ti ripeto: serve per farci capire la struttura, vedere se/quanto è complessa o no.
  • Re: Come utilizzare JSON in Java

    andbin ha scritto:


    nclmr ha scritto:


    non so se sia corretto pubblicarlo il json.
    Se non vuoi/non puoi pubblicare qui quel json, ok, nessun problema.
    Posta almeno un pezzetto (che si capisca la struttura) e con dati anche farlocchi che vuoi tu. Ti ripeto: serve per farci capire la struttura, vedere se/quanto è complessa o no.

    {
    "result": {
    "id": "795ae7f4-421b-4ba2-9a8e-42bc28980dc7",
    "name": "inail-infortuni-lavoro-denunciati-dalle-aziende-sede-legale-comune-milano-2004-2009",
    "title": "Inail: infortuni sul lavoro denunciati dalle aziende con sede legale nel Comune di Milano (2004 - 2009)",
    "author_email": "",
    "maintainer_email": "",
    "license_url": "http://creativecommons.org/licenses/by/4.0",
    "license_id": "CC-BY 4.0",
    "notes": "<p>Numerosità degli infortuni sul lavoro denunciati dalle aziende con sede legale nel comune di Milano. I dati sono distinti a seconda dell'esito dell'infortunio (Infortuni mortali/non mortali) e per le principali caratteristiche demografiche dell'infortunato (età, genere e cittadinanza)</p>\n",
    "state": "Active",
    "type": "Dataset",
    "resources": [
    {
    "id": "e9a01b75-0fa5-44c7-8631-2be8e20cae16",
    "revision_id": "",
    "url": "http://dati.comune.milano.it/dataset/7 ... /ds517.csv",

    },
  • Re: Come utilizzare JSON in Java

    Uhm, sì vedo. Ok, la struttura non è semplice.
    Se hai bisogno solo di prendere i vari url (ce ne sono sicuramente più di uno, quel "resources" infatti è un array di più oggetti similari dentro), potresti forse usare la libreria Jayway JsonPath.
    Prova a leggere, per dubbi chiedi (non l'ho mai usata ma non sarebbe un problema per me).
  • Re: Come utilizzare JSON in Java

    andbin ha scritto:


    Uhm, sì vedo. Ok, la struttura non è semplice.
    Se hai bisogno solo di prendere i vari url (ce ne sono sicuramente più di uno, quel "resources" infatti è un array di più oggetti similari dentro), potresti forse usare la libreria Jayway JsonPath.
    Prova a leggere, per dubbi chiedi (non l'ho mai usata ma non sarebbe un problema per me).
    guarda ti invio l'esempio che il prof ci ha inviato
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.net.URI;
    import java.net.URL;
    import java.net.URLConnection;
    import java.nio.file.Files;
    import java.nio.file.Paths;
    
    import org.json.simple.JSONArray;
    import org.json.simple.JSONObject;
    import org.json.simple.JSONValue;
    import org.json.simple.parser.ParseException;
    
    public class testJSONgetAndDecode {
    
    	public static void main(String[] args) {
    
    		String url = "";
    		if(args.length == 1)
    			url = args[0]; //Url by args ;-)
    		try {
    			
    			URLConnection openConnection = new URL(url).openConnection();
    			openConnection.addRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:25.0) Gecko/20100101 Firefox/25.0");
    			InputStream in = openConnection.getInputStream();
    			
    			 String data = "";
    			 String line = "";
    			 try {
    			   InputStreamReader inR = new InputStreamReader( in );
    			   BufferedReader buf = new BufferedReader( inR );
    			  
    			   while ( ( line = buf.readLine() ) != null ) {
    				   data+= line;
    				   System.out.println( line );
    			   }
    			 } finally {
    			   in.close();
    			 }
    			JSONObject obj = (JSONObject) JSONValue.parseWithException(data); 
    			JSONObject objI = (JSONObject) (obj.get("result"));
    			JSONArray objA = (JSONArray) (objI.get("resources"));
    			
    			for(Object o: objA){
    			    if ( o instanceof JSONObject ) {
    			        JSONObject o1 = (JSONObject)o; 
    			        String format = (String)o1.get("format");
    			        String urlD = (String)o1.get("url");
    			        System.out.println(format + " | " + urlD);
    			        if(format.equals("csv")) {
    			        	download(urlD, "t1.csv");
    			        }
    			    }
    			}
    			System.out.println( "OK" );
    		} catch (IOException | ParseException e) {
    			e.printStackTrace();
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    	}
    	
    	public static void download(String url, String fileName) throws Exception {
    	    try (InputStream in = URI.create(url).toURL().openStream()) {
    	        Files.copy(in, Paths.get(fileName));
    	    }
    	}
    }
    
    però non ho idea a cosa serva e cosa fa specificatamente..
  • Re: Come utilizzare JSON in Java

    nclmr ha scritto:


    guarda ti invio l'esempio che il prof ci ha inviato
    Ok, usa la json-simple.

    nclmr ha scritto:


    però non ho idea a cosa serva e cosa fa specificatamente..
    Eh beh, questo è un problemino.
    Conosci la sintassi JSON? Sostanzialmente a parte stringhe/numeri/true/false/null, possono contenere:
    - oggetti (quelli nella forma { "k1":v1, "k2":v2 ........ } )
    - array (quelli nella forma [ v1, v2 ....... ] )

    Bene, la json-simple è un banalissimo modello ad oggetti che "modella" proprio i tipi di dati JSON. Proprio a "basso" livello del JSON. Nessun binding evoluto con le classi o altre funzionalità più sofisticate.

    Dopo il parsing hai un bel Object e DEVI sapere tu cosa ti aspetti che sia (es. un JSONObject). Quindi devi andare tu a cercare dentro oggetti/array quello che man ti serve.
Devi accedere o registrarti per scrivere nel forum
9 risposte