IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

avec Java Discussion :

Supprime les guillments d'une value Json


Sujet :

avec Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Artisant
    Inscrit en
    Avril 2018
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Artisant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2018
    Messages : 169
    Par défaut Supprime les guillments d'une value Json
    Bonjour,

    Je suis confronte a un petit probleme.

    J'ai mon JsonWriter
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
                JSONObject obj = new JSONObject();
     
     
     
                obj.put("clef",tableau.getText());  
     
                 try {
                    FileWriter out = new FileWriter("src/Games/"+Main.GameSelected+"/"+NomArme.getText()+".json");
     
                    obj.writeJSONString(out);
     
                    out.close();
     
                   } catch (IOException H) {
                    H.printStackTrace();
                }
    qui écrit ceci dans mon fichier .json Jusque la rien d'anormale mais, quand je charge mon Json depuis mon programme,

    j'ai une erreur. L'erreur est logique puisque mon tableau lis l'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was STRING at line 1 column 87 path $.tableau
    Si je vais manuellement dans mon Json et je supprime les guillemets comme ceci : Mon tableau se remplis sans problème, je n'es plus d'erreur

    L'erreur je l'es trouvé mais je ne sais pas comment réglé le problème.

    - Soit j'arrive a écrire dans mon Json le tableau sans les "" mais avec les crochet []
    - Soit a la lecture une méthode qui retire les "".
    - Soit une solution que je n'es pas envisagé


    J'ai cherche de part et autre rien trouvé a ce sujet.

    Je vous remercie.


    Fred

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,

    La solution que tu n'as pas envisagée c'est d'utiliser la bonne classe pour affecter la valeur de type tableau. Tu n'as précisé l'API que tu utilises, ça aurait été mieux vu qu'il y en a pléthore, mais il doit exister à priori une classe JSONArray dans cette API pour construire un tableau...
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Membre expérimenté
    Inscrit en
    Mai 2007
    Messages
    335
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 335
    Par défaut
    Bonjour,
    Oui, indiquer ta lib pourrait nous aider, mais je pense sans trop me tromper que sur cette ligne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
         obj.put("clef",tableau.getText());
    getText renvoie ton tableau au format String, probablement en le "Jsonifiant", donc c'est normal, tu peux tenter


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
         obj.put("clef",tableau);
    si tableau est de type JSONArray et que ta lib l'autorise sur object.put.

    Sinon, je te recommande d'utliser si tu peux de la sérialisation de plus au niveau avec Jackson ou Gson, qui permet de sérialiser directement tes objets custom sans avoir à manipuler des JsonObject et JsonArray.

  4. #4
    Membre confirmé
    Homme Profil pro
    Artisant
    Inscrit en
    Avril 2018
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Artisant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2018
    Messages : 169
    Par défaut
    Bonjour,

    Merci pour vos reponse.

    J'utilise la lib : import org.json.simple.JSONObject;

    Si je fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    obj.put("clef",tableau);
    Çà fonctionne mais étant donne que mes données viennent d'un textfield editable, je recois ceci dans mon Json:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "Clef":javax.swing.JTextField[,110,298,550x30,layout=javax.swing.plaf.basic.BasicTextUI$UpdateHandler,alignmentX=0.0,alignmentY=0.0,border=javax.swing.plaf.BorderUIResource$CompoundBorderUIResource@bb7daa9,flags=296,maximumSize=,minimumSize=,preferredSize=,caretColor=sun.swing.PrintColorUIResource[r=51,g=51,b=51],disabledTextColor=javax.swing.plaf.ColorUIResource[r=184,g=207,b=229],editable=true,margin=javax.swing.plaf.InsetsUIResource[top=0,left=0,bottom=0,right=0],selectedTextColor=sun.swing.PrintColorUIResource[r=51,g=51,b=51],selectionColor=javax.swing.plaf.ColorUIResource[r=184,g=207,b=229],columns=0,columnWidth=0,command=,horizontalAlignment=LEADING]

    Peut etre un JTable a la place d'un Texfield? Mais j'ai essaye et ca na pas fonctionne..



    je vais essaye les solutions propose si dessus.

    je reviens vers vous peu importe l'issue


    Cordialement


    Fred

  5. #5
    Membre expérimenté
    Inscrit en
    Mai 2007
    Messages
    335
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 335
    Par défaut
    J'ai supposé que ton tableau était déjà de type JsonArray, mais il ne va pas se remplir tout seul!
    Il faut convertir ton tableau en bouclant sur les valeurs: lire la doc du "textfield " Utilisé.

    Il faut bien séparer tes données de tes objets écrans, tu ne peux pas "pousser" un objet graphique au milieu de tes données, c'est le 1er niveau de séparation de "concern" (notion de programmation SOLID".

    Bref, après cet aparté, il faut donc que tu arrive par un moyen ou un autre à boucler sur les valeurs "String" de tes données pour pouvoir remplir ton JsonArray. (c'est compliqué car comme je disais, avec Jackson il suffirait d'avoir une List<String> et il se débrouille pour le convertir, là ce serait plus simple.)

    Sans connaitre le type du textfield que tu utilise, difficile d'en dire plus.

  6. #6
    Membre confirmé
    Homme Profil pro
    Artisant
    Inscrit en
    Avril 2018
    Messages
    169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Artisant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2018
    Messages : 169
    Par défaut
    Merci pour vos reponse,

    J'utilise un simple JtextField dont je récupère les données tapées par l'utilisateur.

    Apres pas mal d'essais sur mon code, je suis presque au resultat voulue.

    C'est a dire que si mon Json se retrouve ainsi : mon class qui utilise cette valeur arrive a la lire et réalise le resultat souhaité. (une bonne chose)

    code dans la console :

    Si par contre je rentre plusieurs valeur comme ceci : La ca ne fonctionne pas.

    Au lieu de cherche a tout prix de retire les ("")pour avoir un tableau
    Ne serai t'il pas possible que je fasse un "split" comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {"clef":["5","2","8","5"]}
    au chargement des données.

    Si cela est faisable, les données seront lus.(testé en ayant ecrit un .json manuellement ca fonctionne)

    Voici comment je charge mon .jSON

    Dans mon Main
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     static void setupConfigs() {
                           try {
                               File file = new File("src/Games/"+GameSelected);
                           if (!file.exists()) {
                               FileWriter fileWriter = new FileWriter(file);
                               gson.toJson(new Config(), fileWriter);
                               fileWriter.close();
                           }
                           ConfigManager1.getInstance1().readConfigs();
                           ConfigManager2.getInstance2().readConfigs();
     
                       } catch (IOException e) {
                           e.printStackTrace();
                    }
            }
    Et ensuite la class ConfigManager1.getInstance1().readConfigs(); (identique pour la deuxieme)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    import com.google.gson.Gson;
    import com.google.gson.GsonBuilder;
     
    import java.io.BufferedReader;
    import java.io.File;
    import java.io.FileReader;
    import java.util.ArrayList;
     
     
    class ConfigManager1 {
     
      private static ArrayList<Config> configs = new ArrayList<>();
      private static ConfigManager1 ourInstance1 = new ConfigManager1();
      private int currentConfig = 0;
     
      private ConfigManager1() {
     
      }
     
      static ConfigManager1 getInstance1() {
        return ourInstance1;
      }
     
      void readConfigs() {
        configs.clear();
        Gson gson = new GsonBuilder().setPrettyPrinting().create();
        File dir = new File("src/Games/"+Main.GameSelected);
        File[] files = dir.listFiles();
        if (files != null) {
          for (File file : files) {
            try {
     
              BufferedReader br = new BufferedReader(new FileReader(file));
              Config config = gson.fromJson(br, Config.class);
              config.name = file.getName().replace(".json", "");
              configs.add(config);
              System.out.println("Loaded Config-1:\n" + gson.toJson(config));
              br.close();
            } catch (Exception e) {
              e.printStackTrace();
            }
     
          }
        }
      }
     
      Config getCurrentConfig() {
        if (configs.size() <= 0) {
          return new Config();
        } else {
          return configs.get(currentConfig);
        }
      }
     
      void cycleConfigs() {
        if (configs != null && configs.size() > 0) {
          if (currentConfig == configs.size() - 1) {
            currentConfig = 0;
          } else {
            currentConfig++;
          }
        }
      }
     
     
    }


    Je vous remercie


    Fred

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 9
    Dernier message: 06/11/2007, 12h36
  2. Supprimer les marges dans une page html
    Par Furius dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 12/01/2006, 04h41
  3. [vbexcel]Comment supprimer les doublons dans une combobox?
    Par Mugette dans le forum Macros et VBA Excel
    Réponses: 20
    Dernier message: 24/11/2005, 11h12
  4. Réponses: 9
    Dernier message: 27/10/2005, 13h20
  5. [DEBUTANT]Supprimer les espaces pour une requete
    Par tripper.dim dans le forum Oracle
    Réponses: 4
    Dernier message: 12/10/2005, 16h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo