Convertir InputStream à JSONObject
Je suis la conversion InputStream à JSONObject à l'aide de code suivant. Ma question est, est-il un moyen simple de convertir InputStream à JSONObject. Sans faire InputStream -> BufferedReader -> StringBuilder -> boucle -> JSONObject.toString().
InputStream inputStreamObject = PositionKeeperRequestTest.class.getResourceAsStream(jsonFileName);
BufferedReader streamReader = new BufferedReader(new InputStreamReader(inputStreamObject, "UTF-8"));
StringBuilder responseStrBuilder = new StringBuilder();
String inputStr;
while ((inputStr = streamReader.readLine()) != null)
responseStrBuilder.append(inputStr);
JSONObject jsonObject = new JSONObject(responseStrBuilder.toString());
- Ce que vous avez est très bien. Vous pourrez extraire le
BufferedReader
lecture statique la méthode d'assistance et de ré-utilisation. Certains 3rd party bibliothèques le font déjà.
Vous devez vous connecter pour publier un commentaire.
Puisque vous êtes déjà à l'aide de Google
Json-Simple
de la bibliothèque, vous pouvez analyser le json à partir d'unInputStream
comme ceci:utilisation JsonReader afin d'analyser l'InputStream. Voir l'exemple à l'intérieur de l'API:
http://developer.android.com/reference/android/util/JsonReader.html
Si vous ne voulez pas salir avec le prêt des bibliothèques, vous pouvez juste faire une classe comme ça.
Ensuite, vous pouvez l'utiliser comme ceci:
Ce code fonctionne
vous pouvez utiliser une Entité:
FileEntity
s'attendre à uneFile
ou unURL
ou unInputStream
? Ils semblent être en train de leInputStream
depuis le classpath.Class#getResourceAsStream()
qui retourne unInputStream
pour une ressource sur le chemin de la classe. Ils n'ont pas uneFile
ici.Solution Simple:
Vous pouvez utiliser cette api https://code.google.com/p/google-gson/
C'est simple et très utile,
Voici comment utiliser la https://code.google.com/p/google-gson/ Api pour résoudre votre problème
json.js contenu du fichier :
Cela a fonctionné pour moi:
Une autre solution: utiliser flexjson.jar: http://mvnrepository.com/artifact/net.sf.flexjson/flexjson/3.2
La meilleure solution à mon avis est d'encapsuler le InputStream dans un JSONTokener objet.
Quelque chose comme ceci: