Jump to content

Parser un fichier JSON


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
Link to comment
Share on other 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 ?

Edited by Thomas31
Link to comment
Share on other 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
Link to comment
Share on other 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 ?

Edited by Thomas31
Link to comment
Share on other 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 ?

Edited by Thomas31
Link to comment
Share on other 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)

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...