2010-01-09 4 views
7

Je voudrais savoir comment analyser un flux JSON par des éléments (par exemple, url/titre/description pour chaque élément). J'ai regardé le doc/api mais ça ne m'a pas aidé.Analyse des flux JSON avec google Gson

C'est ce que je suis arrivé à ce jour

import com.google.gson.Gson; 
import com.google.gson.JsonObject; 

public class ImportSources extends Job { 
    public void doJob() throws IOException { 
     String json = stringOfUrl("http://feed.test/all.json"); 
     JsonObject jobj = new Gson().fromJson(json, JsonObject.class); 
     Logger.info(jobj.get("responseData").toString()); 
    } 
    public static String stringOfUrl(String addr) throws IOException { 
     ByteArrayOutputStream output = new ByteArrayOutputStream(); 
     URL url = new URL(addr); 
     IOUtils.copy(url.openStream(), output); 
     return output.toString(); 
    } 
} 

Répondre

9

dépend du format JSON réelle. En fait, vous pouvez simplement créer une classe Javabean personnalisée qui correspond au format JSON. Tous les champs dans JSON peuvent être mappés comme String, Integer, Boolean, etc. Propriétés Javabean. Les tableaux peuvent être mappés en tant que propriétés List. Tous les objets peuvent être mappés en tant qu'une autre propriété Javabean imbriquée. Cela facilite grandement le traitement ultérieur en Java.

Sans un exemple de chaîne JSON de votre côté, c'est seulement de deviner à quoi cela ressemblerait, donc je ne peux pas donner un exemple basique ici. Mais j'ai posté des réponses similaires avant ici, vous trouverez peut-être utile:

Gson dispose également d'un User Guide, vous trouverez peut-être utile aussi bien.

+0

Merci pour votre réponse, je l'ai essayé d'appliquer les exemples à l'alimentation suivante: http://www.stocktwits.com/ streams/all.json. Je n'ai pas réussi à obtenir d'autres valeurs que null. Dois-je créer deux groupes: flux et tweets? – Roch

0

Je ne sais pas si GSON peut faire du streaming/liaison incrémentale (je pensais que non).

Mais y a-t-il une raison spécifique de considérer uniquement cette bibliothèque particulière? D'autres bibliothèques de traitement JSON Java permettent un tel traitement (vous pouvez vérifier les liens que l'autre a pour certaines idées), car il s'agit d'une fonctionnalité assez importante lors du traitement de gros flux.

+0

Eh bien, j'utilisais ROME pour les flux RSS, et le framework que j'utilise contient gson, c'est pourquoi j'essaie de l'utiliser, mais je suis ouvert à toute autre bibliothèque. – Roch

+0

Ok. Comme je l'ai dit, je pense que GSON ne fait que la liaison complète des documents, mais je ne suis pas à 100%. Pour une alternative, Jackson (http://jackson.codehaus.org) permet la liaison incrémentale, ainsi que plusieurs autres modes de fonctionnement. La façon dont cela fonctionne est que vous devez obtenir un JsonParser pour le principal, parcourir le tableau JSON principal ou l'objet, et appeler parser.readValueAs() pour la liaison réelle. Liste de diffusion utilisateur peut aider avec des détails, si la documentation n'a pas assez de pointeurs. – StaxMan

3

Gson 1.4 a une nouvelle API JsonStreamParser qui vous permet d'analyser plusieurs objets JSON un par un à partir d'un flux.