Salut à tous.
J'ai un problème sur lequel je bute depuis un peu de temps. Je récupère un fichier Json et ses données. Je les transforme en objets index. Dedans j'ai un variable boolean qui sert à savoir si on a lu cette donnée. Le problème maintenant, c'est que je voudrais réenvoyer ses données dans le fichier Json histoire d'update les données et faire passer le boolean à true. Le soucis, c'est que je sais absolument pas comment ré injecter les données pour un fichier json, idéalement, dans le même fichier. Après, dans le groupe de projet, on est pas totalement sûr de la façon de faire pour indiquer qu'une donnée à été lu, on a décidé de passer avec le bool un peu par défaut. L'idéal du coup, serait de simplement switch la valeur check à true dans le fichier Json.
Si quelqu'un à un exemple de réécriture de données + enregistrement json, je suis preneur, Merci
dans le fichier java.
try {
int i=0;1
String url = "indexeur/src/main/resources/Indexes.json";
JsonReader reader = new JsonReader(new InputStreamReader(
new FileInputStream(url)));
JsonParser jsonParser = new JsonParser();
JsonObject userArray = jsonParser.parse(reader).getAsJsonObject();
System.out.println("USERARRAY "+userArray);
JsonArray objets = userArray.getAsJsonArray("Index ");
System.out.println(" Là c'est notre objet "+objets);
List<Index> Indexs = new ArrayList<Index>();
Gson myGson = new Gson();
Gson MyGson2=new Gson();
System.out.println("Moi et mes kheys on part sur la Lune");
for (JsonElement aUser : objets) {
System.out.println(aUser);
Index aPlayer = myGson.fromJson(aUser, Index.class);
Indexs.add(aPlayer);
}
int iz=Indexs.size();
Index[] tab=new Index[iz];
for (Index object : Indexs) {
object.setCheck(true);
System.out.println("url: "+object.getUrl()+" keyWords: "+object.getKeyWords()+" descriptif: "+object.getDescriptif()+object.isCheck());
tab[i]=new Index(object.getUrl(),object.getKeyWords(),object.getDescriptif(),object.isCheck());
System.out.println(" fin d'essai "+Indexs.get(i).getUrl()+" "+Indexs.get(i).isCheck());
i++;
}
--------------------
Le fichier Indexes.json en question:
{
"Index " : [
{
"url":"url 1",
"keyWords":["essai1","essai11"],
"descriptif":"data 1",
"check":false
},
{
"url":"url 2",
"keyWords":["essai2","essai22"],
"descriptif":"data 2",
"check":false
},
Bonjour
alors tu fais ton import org.json.JSONObject;
Pour lire un fichier JSON:
JSONObject mp = new JSONObject(result);
JSONObject resultJSON = mp.getJSONObject("Response");
monObjet.setProperties1(resultJSON.getBoolean("Boolean1"));
monObjet.setProperties2(resultJSON.getBoolean("Boolean2"));
Plusieurs questions : pourquoi souhaites-tu mettre à jour le fichier constamment ? N'y-a-t'il pas moyen de tout traiter d'un coup ?
Tu peux charger facilement la totalité du fichier avec Jackson et boucler sur les données recueillies. C'est beaucoup plus simple et demandera énormément moins de code que ce que tu as fait.
Par ailleurs, attention au new InputStreamReader que tu utilises. Avec ton code tu as créé une fuite de ressource (le fichier n'est jamais fermé, et si tu en ouvres plein au bout d'un moment l'application crashera). En java < 7 il faut faire un try/catch autour du code puis fermer la ressource dans un finally.
En java >= 7 tu peux utiliser le try-with-resource.
En gros, on veut au chargement envoyer les indexs à différents serveurs. On a placé le boolean dans le cas où si à un moment donné, on rajoute des données et qu'on veut les ré envoyer aux serveurs; on ne réenvoit pas toutes les données, mais seulement les nouvelles.