Aller au contenu

Parser un fichier JSON


Actu_numerique

Recommended Posts

Il te dit qu'il ne trouve pas la propriété "Users" (avec un U majuscule) dans la classe ObjetUsers, dans laquelle la propriété en question s'appelle "users" (avec un u minuscule, selon le standard JavaBean). Dans ton flux JSON, renomme donc cette propriété en "users", cela fonctionnera peut être mieux

  • Like 1
Lien vers le commentaire
Partager sur d’autres sites

Je suis vraiment un boulet... Merci !

quand j'avais vu cette erreur j'avais essayé de modifié le "users" en "Users"...

Ça ne marchais pas... mais en modifiant dans le fichier JSON pas de soucis...

le fais d’écrire "Users" dans le code n'est pas pris en compte en fait ? que ce passe t'il ?

Modifié par Thomas31
Lien vers le commentaire
Partager sur d’autres sites

C'est le nom des getters/setters qui est pris en compte par Jackson (les méthodes getUsers et setUsers dans ObjetUsers). A partir de ces méthodes, il en déduit le nom de la propriété, en enlevant le préfixe (get et set) et en passant la première lettre en minuscule; donc, la propriété s'appelle "users", même si ton getter se nomme "getUsers"; c'est le principe du standard "JavaBean".

  • Like 1
Lien vers le commentaire
Partager sur d’autres sites

Bon je n'ai pas de problème pour parser avec android 2.1,

mais lorsque je test sur android 4.2, j'ai des erreur au niveau du téléchargement du fichier... il semble ne pas trouver le fichier a l'adresse indiqué.

le code :

package Controlleurs;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.HashMap;
import android.os.Environment;
import com.fasterxml.jackson.core.JsonFactory;
import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.ObjectMapper;
import elements.Line;
public class LinesController {
private static final String DL_URL = "http://pt.data.tisseo.fr/linesList?format=json&displayTerminus=1";
private ObjectMapper objectMapper = null;
private JsonFactory jsonFactory = null;
private JsonParser jp = null;
private ArrayList<Line> lineList = null;
private ParseLines parse = null;
private File jsonOutputFile;
private File jsonFile;
private HashMap<String, Line> lineListId = null;
public LinesController() {
 objectMapper = new ObjectMapper();
 jsonFactory = new JsonFactory();
 lineListId = new HashMap<String, Line>();
}
public void init() {
 downloadJsonFile();
 try{
 this.jp = jsonFactory.createJsonParser(jsonFile);
 this.parse = objectMapper.readValue(jp, ParseLines.class);
 this.lineList = parse.getLines().getLine();
 for (int i = 0; i < parse.getLines().getLine().size(); i++) {
 this.lineListId.put(parse.getLines().getLine().get(i).getShortName(), parse.getLines().getLine().get(i));
 }
 } catch(JsonParseException e) {
	 e.printStackTrace();
 } catch(IOException e) {
	 e.printStackTrace();
 }
}
private void downloadJsonFile() {
 try{
	 createFileAndDirectory();
	 URL url = new URL(LinesController.DL_URL);
	 HttpURLConnection urlConnection;
	 urlConnection = (HttpURLConnection) url.openConnection();
	 urlConnection.setRequestMethod("GET");
	 urlConnection.setDoOutput(true);
	 urlConnection.connect();
	 FileOutputStream fileOutput = new FileOutputStream(jsonFile);
	 InputStream inputStream = urlConnection.getInputStream();
	 byte[] buffer = new byte[1024];
	 int bufferLength = 0;
	 while((bufferLength = inputStream.read(buffer)) > 0) {
	 fileOutput.write(buffer, 0, bufferLength);
	 }
	 fileOutput.close();
 } catch(MalformedURLException e) {
	 e.printStackTrace();
 } catch(IOException e) {
	 e.printStackTrace();
 }
}
private void createFileAndDirectory() throws FileNotFoundException {
final String extStorageDirectory = Environment
 .getExternalStorageDirectory().toString();
final String meteoDirectory_path = extStorageDirectory + "/toulouse-navigation";
jsonOutputFile = new File(meteoDirectory_path, "/");
if(jsonOutputFile.exists() == false)
 jsonOutputFile.mkdirs();
jsonFile = new File(jsonOutputFile, "lines.json");
}
public ArrayList<Line> findAll() {
 return lineList;
}
public HashMap<String, Line> getLineListId() {
return lineListId;
}
}

le logcat :

01-12 15:16:42.517: W/System.err(1066): java.io.FileNotFoundException: http://pt.data.tisseo.fr/linesList?format=json&displayTerminus=1
01-12 15:16:42.537: W/System.err(1066): at libcore.net.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:186)
01-12 15:16:42.549: W/System.err(1066): at Controlleurs.LinesController.downloadJsonFile(LinesController.java:68)
01-12 15:16:42.549: W/System.err(1066): at Controlleurs.LinesController.init(LinesController.java:43)

EDIT :

En fait les version récentes ne semble pas prendre en compte l'adresse :http://pt.data.tisseo.fr/linesList?format=json&displayTerminus=1.

Car si j'heberge le fichier sur mon serveur, l'application le télécharge bien...

Comment remédier a ce problème ?

Modifié par Thomas31
Lien vers le commentaire
Partager sur d’autres sites

Bon bah je viens de vois que l'erreur été aussi présente sur android 2.1 lorsque je change

urlConnection.setRequestMethod("GET");

en

urlConnection.setRequestMethod("POST");

mais ne cause pas de fermeture de l'application sur cette version.

Voici le logcat :

01-13 19:52:31.229: W/System.err(437): java.io.FileNotFoundException: http://pt.data.tisseo.fr/linesList?format=json&displayTerminus=1/
01-13 19:52:31.229: W/System.err(437): at org.apache.harmony.luni.internal.net.www.protocol.http.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:521)
01-13 19:52:31.239: W/System.err(437): at Controlleurs.LinesController.downloadJsonFile(LinesController.java:69)
01-13 19:52:31.239: W/System.err(437): at Controlleurs.LinesController.init(LinesController.java:44)
01-13 19:52:31.239: W/System.err(437): at com.example.parsingtest.Ligne$1.run(Ligne.java:38)

Comment remédier a ce problème ?

Modifié par Thomas31
Lien vers le commentaire
Partager sur d’autres sites

Pourquoi veux-tu changer la méthode HTTP utilisée ?

Si c'est GET qu'il faut utiliser (cela dépend de l'implémentation de ton application sur le serveur), il ne faut pas dans ce cas que tu fasses le urlConnection.setDoOutput(true) que l'on voie dans ton code (qu'il ne faut utiliser que pour une requête POST ou PUT... qui envoie des données au serveur)

Lien vers le commentaire
Partager sur d’autres sites

Rejoignez la conversation

Vous pouvez poster maintenant et vous enregistrez plus tard. Si vous avez un compte, connectez-vous maintenant pour poster.

Invité
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

×
×
  • Créer...