2016-02-22 2 views
0

Sans utiliser d'autres JAR ou API, en utilisant strictement javax.json.*, comment puis-je lire un objet JSON à partir d'une URL?comment lire un objet JSON à partir d'une URL avec JsonReader?

Le javadocs suggèrent qu'il est possible:

JsonReader jsonReader = Json.createReader(new StringReader("[]")); 
JsonArray array = jsonReader.readArray(); 
jsonReader.close(); 

mais ne sont pas spécifiques sur la façon d'utiliser un URL or URI.

code actuel:

package net.bounceme.noagenda; 

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.io.StringReader; 
import javax.json.JsonObject; 
import static java.lang.System.out; 
import java.net.URL; 
import java.net.URLConnection; 
import java.nio.charset.Charset; 
import java.util.logging.Level; 
import java.util.logging.Logger; 
import javax.json.Json; 
import javax.json.JsonArray; 
import javax.json.JsonReader; 

public class NoAgenda { 

    public static void main(String[] args) { 
     new NoAgenda().fromURL(); 
    } 

    private void fromURL() { 
     try { 
      String jsonString = callURL("http://www.javascriptkit.com/dhtmltutors/javascriptkit.json"); 
     } catch (IOException ex) { 
      Logger.getLogger(NoAgenda.class.getName()).log(Level.SEVERE, null, ex); 
     } 
     try (JsonReader jsonReader = Json.createReader(new StringReader("[]"))) { 
      JsonArray array = jsonReader.readArray(); 
      out.println(array.toString()); 
     } 
    } 

    public String callURL(String myURL) throws IOException { 
     System.out.println("Requested URL:" + myURL); 
     StringBuilder sb = new StringBuilder(); 
     URLConnection urlConn = null; 
     InputStreamReader in = null; 
     URL url = new URL(myURL); 
     urlConn = url.openConnection(); 
     if (urlConn != null) { 
      urlConn.setReadTimeout(60 * 1000); 
     } 
     if (urlConn != null && urlConn.getInputStream() != null) { 
      in = new InputStreamReader(urlConn.getInputStream(), 
        Charset.defaultCharset()); 
      BufferedReader bufferedReader = new BufferedReader(in); 
      if (bufferedReader != null) { 
       int cp; 
       while ((cp = bufferedReader.read()) != -1) { 
        sb.append((char) cp); 
       } 
       bufferedReader.close(); 
      } 
     } 
     in.close(); 
     return sb.toString(); 
    } 

    public JsonObject buildBook() { 
     JsonObject value = Json.createObjectBuilder() 
       .add("firstName", "John") 
       .add("lastName", "Smith") 
       .add("age", 25) 
       .add("address", Json.createObjectBuilder() 
         .add("streetAddress", "21 2nd Street") 
         .add("city", "New York") 
         .add("state", "NY") 
         .add("postalCode", "10021")) 
       .add("phoneNumber", Json.createArrayBuilder() 
         .add(Json.createObjectBuilder() 
           .add("type", "home") 
           .add("number", "212 555-1234")) 
         .add(Json.createObjectBuilder() 
           .add("type", "fax") 
           .add("number", "646 555-4567"))) 
       .build(); 
     return value; 
    } 

} 

essayant d'obtenir l'objet JSON pour cette page:

http://www.javascriptkit.com/dhtmltutors/javascriptkit.json

à nouveau, à Réitérons, souligner, tout en utilisant javax paquets.

Répondre

1

Vous pouvez faire quelque chose comme ça, même si je n'ai jamais travaillé sur JSON API dans javax.

try(InputStream is = new URL(your_url).openStream(); 
JsonReader reader = Json. createReader(new InputStreamReader(is, "UTF-8"));){ 
//TODO: Let's start doing Yoga with Json 
} 
catch(IOException e){ 
e.printStackTrace(); 
} 
+0

http://docs.oracle.com/javaee/7/api/javax/json/JsonReader.html? La seule raison pour laquelle je n'ai jamais accepté votre réponse est que j'ai été trop paresseux pour l'essayer ... LOL. – Thufir