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

Développement Web en Java Discussion :

[GSON] Caractère # pose problème


Sujet :

Développement Web en Java

  1. #1
    Membre actif

    Inscrit en
    Août 2005
    Messages
    401
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 401
    Points : 228
    Points
    228
    Par défaut [GSON] Caractère # pose problème
    Bonjour,

    J'envoie à mon programme java une String contenant le code JSON suivant :

    Code JSON formaté :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    {
      "testx": [
        {
          "id": "UID#0"
        }
      ]
    }
    J'utilise GSON pour traduire ce code en un objet. Cela fonctionne parfaitement tant que je ne met pas de # dans l'id. A partir du moment où j'ai un # cela pose problème du côté de JAVA.

    En javascript je traduis comme ceci :
    JSON.stringify('testx': 'UID#0');

    Et en Java je fais simplement ceci :
    Global env = gson.fromJson(global, Global.class);
    où global correspond à ma requête JSON.

    Quand j'ai un # j'obtiens cette erreur :

    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
    Exception in thread "main" com.google.gson.JsonSyntaxException: java.io.EOFException: End of input at line 1 column 234
    	at com.google.gson.Gson.fromJson(Gson.java:813)
    	at com.google.gson.Gson.fromJson(Gson.java:768)
    	at com.google.gson.Gson.fromJson(Gson.java:717)
    	at com.google.gson.Gson.fromJson(Gson.java:689)
    	at simulator.socket.Launch.main(Launch.java:70)
    Caused by: java.io.EOFException: End of input at line 1 column 234
    	at com.google.gson.stream.JsonReader.nextNonWhitespace(JsonReader.java:1377)
    	at com.google.gson.stream.JsonReader.doPeek(JsonReader.java:471)
    	at com.google.gson.stream.JsonReader.hasNext(JsonReader.java:403)
    	at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:166)
    	at com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.read(TypeAdapterRuntimeTypeWrapper.java:40)
    	at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.read(CollectionTypeAdapterFactory.java:81)
    	at com.google.gson.internal.bind.CollectionTypeAdapterFactory$Adapter.read(CollectionTypeAdapterFactory.java:60)
    	at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$1.read(ReflectiveTypeAdapterFactory.java:93)
    	at com.google.gson.internal.bind.ReflectiveTypeAdapterFactory$Adapter.read(ReflectiveTypeAdapterFactory.java:172)
    	at com.google.gson.Gson.fromJson(Gson.java:803)
    	... 4 more
    Est-ce que cela vous ai déjà arrivé ? J'ai tenté de traduire en Unicode \u0023 mais toujours le même problème.

    En vous remerciant par avance.

  2. #2
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    Essaye peut-être avec la fonction javascript escape("uid#33")...
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre actif

    Inscrit en
    Août 2005
    Messages
    401
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 401
    Points : 228
    Points
    228
    Par défaut
    Merci pour ta réponse OButterlin, malheureusement cela ne fonctionne pas.

    J'ai plutôt l'impression que le problème vient de GSon Reader au niveau JAVA. C'est pour ça que j'ai posté ici d'ailleurs.

    J'ai tenté de convertir les # avec escape j'obtiens "UID%230" mais cela pose toujours problème à GSon.

    C'est vraiment étrange car je n'arrive pas à échapper ce caractère pour que Gson l'accepte. Au niveau de mon objet java l'ID est une String. Donc normalement cela ne pose pas soucis.

  4. #4
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    A la limite, tu peux passer par un caractère de remplacement (en attendant mieux), dans le genre ID?23 que tu remplaceras côté serveur par ID#23...
    C'est de la bidouille mais ça permet d'avancer en attendant un éventuel correctif (ou une meilleure solution )
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre actif

    Inscrit en
    Août 2005
    Messages
    401
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 401
    Points : 228
    Points
    228
    Par défaut
    Oui c'est ce que je fais du coup, mais c'est quand même bizarre car quand j'utilise la méthode GSon toJSON en java avec le caractère # cela ne pose pas de soucis.

    Enfin, la question reste ouverte. Merci de ton aide en tout cas.

    Bonne journée

  6. #6
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 310
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 310
    Points : 9 522
    Points
    9 522
    Billets dans le blog
    1
    Par défaut
    En regardant le code de JSON, le caractère "#" est effectivement spécial, le parser considère qu'il faut aller en fin de ligne (je suppose qu'il prend ça pour un commentaire).
    Je n'ai pas tout lu mais tu pourrais essayer de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    JsonReader.setLenient(true)
    ... à tester...
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Membre régulier
    Profil pro
    dev
    Inscrit en
    Mars 2007
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : dev

    Informations forums :
    Inscription : Mars 2007
    Messages : 53
    Points : 78
    Points
    78
    Par défaut
    Bonjour,

    d'après le code source de nextNonWhitespace

    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
    private int  [More ...] nextNonWhitespace() throws IOException {
    ...
           case '#':
             /*
              * Skip a # hash end-of-line comment. The JSON RFC doesn't
     
              * specify this behaviour, but it's required to parse
     
              * existing documents. See http://b/2571423.
     
              */
             checkLenient();
     
             skipToEndOfLine();
     
             continue;
     
           default:
     
             return c;
     
           }
     
         }
     
         throw new EOFException("End of input");
     
       }
    le caractère # est un caractère spécial utilisé pour les commentaires json.

  8. #8
    Membre actif

    Inscrit en
    Août 2005
    Messages
    401
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 401
    Points : 228
    Points
    228
    Par défaut
    Ah mais oui ! c'est un commentaire en JSON

    Merci à vous, je me suis débrouiller pour ne pas utiliser de # mais j'ai appris une chose aujourd'hui.

    Je passe en résolu merci.

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

Discussions similaires

  1. xml+caractère & pose problème à php
    Par polyvan dans le forum Langage
    Réponses: 9
    Dernier message: 01/04/2009, 15h16
  2. caractère \ pose problème
    Par questionneuse dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 11/07/2006, 16h25
  3. jointure externe avec un where, me pose problème!
    Par Danae dans le forum Langage SQL
    Réponses: 3
    Dernier message: 18/07/2005, 17h37
  4. Réponses: 3
    Dernier message: 17/05/2005, 11h16

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