54 votes

Comment analyser un flux d'entrée JSON

J'utilise Java pour appeler une URL qui renvoie un objet JSON :

 url = new URL("my URl");
urlInputStream = url.openConnection().getInputStream();

Comment puis-je convertir la réponse sous forme de chaîne et l'analyser ?

78voto

Martin Christmann Points 1098

Je suggérerais que vous deviez utiliser un lecteur pour convertir votre InputStream en.

 BufferedReader streamReader = new BufferedReader(new InputStreamReader(in, "UTF-8")); 
StringBuilder responseStrBuilder = new StringBuilder();

String inputStr;
while ((inputStr = streamReader.readLine()) != null)
    responseStrBuilder.append(inputStr);
new JSONObject(responseStrBuilder.toString());

J'ai essayé in.toString() mais il renvoie :

 getClass().getName() + '@' + Integer.toHexString(hashCode())

(comme la documentation dit qu'il dérive de toString de l'objet)

6voto

Fr4nz Points 381

Pour ceux qui ont souligné le fait que vous ne pouvez pas utiliser la méthode toString de InputStream comme celle-ci, voir https://stackoverflow.com/a/5445161/1304830 :

Ma bonne réponse serait alors :

 import org.json.JSONObject;

public static String convertStreamToString(java.io.InputStream is) {
    java.util.Scanner s = new java.util.Scanner(is).useDelimiter("\\A");
    return s.hasNext() ? s.next() : "";
}

...

JSONObject json = new JSONObject(convertStreamToString(url.openStream());

5voto

Somu Points 843

Si vous aimez utiliser Jackson Databind (que Spring utilise par défaut pour ses HttpMessageConverters ), vous pouvez utiliser l' API ObjectMapper.readTree(InputStream) . Par exemple,

 ObjectMapper mapper = new ObjectMapper();
JsonNode json = mapper.readTree(myInputStream);

4voto

Penkov Vladimir Points 705

utilisez jackson pour convertir le flux d'entrée json en carte ou en objet http://jackson.codehaus.org/

il existe également d'autres bibliothèques utiles pour json, vous pouvez google : json java

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