71 votes

Comment dois-je analyser JSON à partir d'un Java HTTPResponse?

J'ai un objet HttpResponse pour une requête web je viens de faire. La réponse est dans le format JSON, j'ai donc besoin de l'analyser. Je peux le faire dans un univers complexe, mais il semble qu'il doit y avoir une meilleure façon.

Est-ce vraiment le mieux que je puisse faire?

    HttpResponse response; // some response object
    Reader in = new BufferedReader(
        new InputStreamReader(response.getEntity().getContent(), "UTF-8"));
    StringBuilder builder= new StringBuilder();
    char[] buf = new char[1000];
    int l = 0;
    while (l >= 0) {
        builder.append(buf, 0, l);
        l = in.read(buf);
    }
    JSONTokener tokener = new JSONTokener( builder.toString() );
    JSONArray finalResult = new JSONArray( tokener );

Je suis sur Android si cela fait une différence.

83voto

BalusC Points 498232

Deux choses qui peut être fait de manière plus efficace:

  1. Utiliser StringBuilder au lieu de StringBuffer puisque c'est le plus rapide et le plus jeune frère.
  2. Utiliser BufferedReader#readLine() le lire ligne par ligne au lieu de la lire char par char.

HttpResponse response; // some response object
BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent(), "UTF-8"));
StringBuilder builder = new StringBuilder();
for (String line = null; (line = reader.readLine()) != null;) {
    builder.append(line).append("\n");
}
JSONTokener tokener = new JSONTokener(builder.toString());
JSONArray finalResult = new JSONArray(tokener);

Si le JSON est en fait une seule ligne, alors vous pouvez aussi enlever la boucle et de construction.

HttpResponse response; // some response object
BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent(), "UTF-8"));
String json = reader.readLine();
JSONTokener tokener = new JSONTokener(json);
JSONArray finalResult = new JSONArray(tokener);

9voto

ZZ Coder Points 36990

L'utilisation de JSON Simple,

http://code.google.com/p/json-simple/

Qui a une petite empreinte, pas de dépendance, il est donc parfait pour Android.

Vous pouvez faire quelque chose comme ceci,

Object obj=JSONValue.parse(buffer.tString());
JSONArray finalResult=(JSONArray)obj;

5voto

Rajesh Batth Points 356

Vous pouvez utiliser le Gson bibliothèque pour analyse

void getJson() throws IOException {
    HttpClient  httpClient = new DefaultHttpClient();
    HttpGet httpGet = new HttpGet("some url of json");
    HttpResponse httpResponse = httpClient.execute(httpGet);
    String response = EntityUtils.toString(httpResponse.getEntity());

    Gson gson = new Gson();
    MyClass myClassObj = gson.fromJson(response, MyClass.class);

}

voici un exemple de fichier json qui est fetchd à partir du serveur

{
"id":5,
"name":"kitkat",
"version":"4.4"
}

voici ma classe

class MyClass{
int id;
String name;
String version;
}

reportez-vous à cette

2voto

CommonsWare Points 402670

Jackson s'affiche à l'appui, d'une certaine quantité de parsing JSON directement à partir d'une InputStream. Ma compréhension est qu'il fonctionne sous Android et est assez rapide. D'autre part, il est un supplément de POT à inclure dans votre application, l'augmentation de téléchargement et flash taille.

0voto

Jove Kuang Points 86

Au lieu de faire

Reader in = new BufferedReader(
    new InputStreamReader(response.getEntity().getContent(), "UTF-8"));
StringBuilder builder= new StringBuilder();
char[] buf = new char[1000];
int l = 0;
while (l >= 0) {
    builder.append(buf, 0, l);
    l = in.read(buf);
}
JSONTokener tokener = new JSONTokener( builder.toString() );

Vous pouvez le faire:

JSONTokener tokener = new JSONTokener(
                           IOUtils.toString(response.getEntity().getContent()) );

où IOUtils est de l'commons IO bibliothèque.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X