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

Format d'échange (XML, JSON...) Java Discussion :

Java et Json


Sujet :

Format d'échange (XML, JSON...) Java

  1. #1
    Nouveau membre du Club
    Inscrit en
    Septembre 2006
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 36
    Points : 31
    Points
    31
    Par défaut Java et Json
    Bonjour J'ai une classe bean
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    public class TestBean
    {
     
        private String peer;
        private String laNew;
        private String name = "7112";
        private int ts = 1271931546;
        private Boolean active = true;
        private String smsQuotas;
        private int mo = -1;
        private int mt = -1;
        private int dr = -1;
        private int other = -1;
        private String dsnRouting = "";
    je dois générer à partir d'un objet de cette classe un objet json comme l'exempel plus bas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    { "peer": { "laNew": {
    	"name": "7112",
    	"ts": 1271931546,
    	"active": true,
    	"smsQuotas": {
    		"mo": -1,
    		"mt": -1,
    		"dr": -1,
    		"other": -1
    	},
    	"dsnRouting": "",
    }}
    sauf que en créant mon objet et en l'affichant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      TestBean t = new TestBean();
            System.out.println(JSONSerializer.toJSON(t));
    j'ai plutôt

    {"peer":"","other":-1,"mo":-1,"ts":1271931546,"dsnRouting":"","mt":-1,"name":"7112","active":true,"laNew":"","smsQuotas":"","dr":-1}

    merci de m'aider

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Euh... Ça te semble pas absolument évident que ce que tu obtiens est exactement ce que tu as demandé ?

    Que pour obtenir le résultat que tu cherches, il faut plusieurs objets ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Nouveau membre du Club
    Inscrit en
    Septembre 2006
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 36
    Points : 31
    Points
    31
    Par défaut
    merci pour la remarque. Le problème est que je ne connais pas du tout à la base json j'ai lu quelques infos sur le net.

    Alors quant à ce qui est évident ou non ..... reste à voir......

  4. #4
    Nouveau membre du Club
    Inscrit en
    Septembre 2006
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 36
    Points : 31
    Points
    31
    Par défaut
    Citation Envoyé par thelvin Voir le message
    Euh... Ça te semble pas absolument évident que ce que tu obtiens est exactement ce que tu as demandé ?

    Que pour obtenir le résultat que tu cherches, il faut plusieurs objets ?
    des objets json je suppose!!!!!!!!

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    50
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 50
    Points : 48
    Points
    48
    Par défaut
    Coté Java, il faudrait que tu ais:

    -un "objet" "peer" qui va contenir :
    1- un "objet" "laNew" qui lui même, va contenir :
    a- un attribut "name"
    b- un attribut "ts"
    c- un attribut "active":
    d- un "objet" "smsQuotas" qui contient :
    * un attribut "mo"
    * un attribut "mt"
    * un attribut "dr"
    * un attribut "other"
    2- un attribut "dsnRouting"

    cela te semble-t-il plus clair?

  6. #6
    Nouveau membre du Club
    Inscrit en
    Septembre 2006
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 36
    Points : 31
    Points
    31
    Par défaut
    Citation Envoyé par Paci88 Voir le message
    Coté Java, il faudrait que tu ais:

    -un "objet" "peer" qui va contenir :
    1- un "objet" "laNew" qui lui même, va contenir :
    a- un attribut "name"
    b- un attribut "ts"
    c- un attribut "active":
    d- un "objet" "smsQuotas" qui contient :
    * un attribut "mo"
    * un attribut "mt"
    * un attribut "dr"
    * un attribut "other"
    2- un attribut "dsnRouting"

    cela te semble-t-il plus clair?
    bien sûr et je t'en remercie

  7. #7
    Nouveau membre du Club
    Inscrit en
    Septembre 2006
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 36
    Points : 31
    Points
    31
    Par défaut
    J'ai une classe java qui me transforme un bean en un object json
    Sauf que en sortie dans lequel je souhaiterais avoir les champs n'est pas ce qui est affiché: J'ai donc ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {"peer":{"lanew":{"dnsRouting":"","ts":0,"name":"3100","netmasks":"","lastEditor":"root","active":true,"smsQuotas":{"other":-1,"mo":-1,"mt":-1,"dr":-1}}}}
    au lieu

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {"peer":{"lanew":{"name":"3100"","ts":0,"lastEditor":"root","netmasks":"","active":true,"dnsRouting":"","smsQuotas":{"other":-1,"mo":-1,"mt":-1,"dr":-1}}}}
    qui est l'ordre dans lequel je rempli mes champs

    une idée?

  8. #8
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    En fait, contrairement à XML, les champs n'ont pas d'ordre. Si on veut un ordre il faut utiliser les tableaux.
    Le principe de JSON est d'être la même chose, qu'un littéral d'objet quelconque JavaScript. Et les propriétés d'objet n'ont pas d'ordre.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  9. #9
    Nouveau membre du Club
    Inscrit en
    Septembre 2006
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 36
    Points : 31
    Points
    31
    Par défaut
    Citation Envoyé par thelvin Voir le message
    En fait, contrairement à XML, les champs n'ont pas d'ordre. Si on veut un ordre il faut utiliser les tableaux.
    Le principe de JSON est d'être la même chose, qu'un littéral d'objet quelconque JavaScript. Et les propriétés d'objet n'ont pas d'ordre.
    je vais devoir passer par des tableau alors

  10. #10
    Nouveau membre du Club
    Inscrit en
    Septembre 2006
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 36
    Points : 31
    Points
    31
    Par défaut
    Je souhaite pourvoir écrire le contenu d'un objet json dans un fichier.json.
    l'objet que j'ai un bean que je transforme en un string avec le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    JSONObject.fromObject(wb).toString()
    sauf que je dans le fichier résultat, l'affichage n'est formaté avec les retours à la ligne. Existe t'il des api permettant d'écrire le contenu d'un objet json avec un bon formatage(avec une hiérachie; objet , name/value etc

  11. #11
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Il est assez rare qu'une API JSON ne propose rien pour ça. (Et même quand c'est le cas, si l'API peut au moins échapper les chaînes de caractères, ce n'est pas difficile à faire soi-même.)

    JSON in Java, une bibliothèque simple, permet de faire un toString(int) où le paramètre indique le nombre d'espaces par indentation.
    Le plus gros défaut de cette bibliothèque, à mes yeux, est qu'il est compliqué de faire du XPath dessus.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  12. #12
    Nouveau membre du Club
    Inscrit en
    Septembre 2006
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 36
    Points : 31
    Points
    31
    Par défaut
    Je souhaiterais ne pas afficher les valeurs "null" de mon objet Json.
    Concrètement, si dans mon objet Json j'ai un champ du style:
    "name":null

    lors de l'écriture dans un fichier. Ce champ ne devrait pas apparaître

    merci

  13. #13
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Ben, deux possibilités :

    - Enlève de ton JSON tout ce qui est null

    OU

    - Copie ton JSON dans un autre JSON, mais sans ce qui est null.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  14. #14
    Nouveau membre du Club
    Inscrit en
    Septembre 2006
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 36
    Points : 31
    Points
    31
    Par défaut
    Comment pourrai je enlever de mon json les null. faut il overrider la méthode to string dans ce cas?
    merci pour tes précisions

  15. #15
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Citation Envoyé par hjulius Voir le message
    Comment pourrai je enlever de mon json les null.
    Hum. Pour chaque objet, tu parcours toutes ses propriétés, avec une méthode keys() ou quoi que ce soit fourni par ton API, et s'il y en a des nulles, tu l'enlèves, avec une méthode remove() ou quoi que ce soit de fourni par ton API.

    Citation Envoyé par hjulius Voir le message
    faut il overrider la méthode to string dans ce cas?
    Dans quel cas ?
    Tu peux t'amuser à réécrire une méthode de transformation objet JSON vers texte, mais à mon avis il est bien plus simple de juste enlever ce que tu ne veux pas, puis d'utiliser les méthodes existantes pour transformer en texte.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  16. #16
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    335
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 335
    Points : 511
    Points
    511
    Par défaut
    Salut,
    J'ai jamais utilisé" JSONSerializer: Je crée plutôt mes JSONObject et JSONArray à la main.
    Justement dans ton cas, vu que le résultat de JSONSerializer ne te plait pas, autant le faire à la main.

    Ici tu a simplement des JSONObject qui contient des JSONObject et des Attributs simples. donc tu lance un suite de JSONObject.put... sur tes attributs en conditionnant le null. C'est mieux que de créer puis supprimer (bonjour l'usine)

    http://www.json.org/javadoc/index.ht...SONObject.html

  17. #17
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Citation Envoyé par deltree Voir le message
    J'ai jamais utilisé" JSONSerializer: Je crée plutôt mes JSONObject et JSONArray à la main.
    Attention à ne pas se surestimer et à ne pas croire qu'on sait échapper une string JavaScript quand ce n'est pas le cas.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  18. #18
    Membre confirmé
    Inscrit en
    Mai 2007
    Messages
    335
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 335
    Points : 511
    Points
    511
    Par défaut
    Voilà tout à fait le genre de remarque condescendante qui fait que je déserte les forums ces dernières années.

    J'aurais pu avoir tort car je ne détiens pas l'élexir de vérité (moi) , donc j'ai vérifié:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    		JSONObject obj = new JSONObject();
    		obj.put("aa","aaa");
    		obj.put("bb'\"",new JSONObject());
    		obj.put("aa2",12);
    		System.out.println(obj.toString());
    //sortie: {"aa":"aaa","bb'\"":{},"aa2":12}
    Ici la chaine est bien échappée. CQFD

  19. #19
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Navré de vous avoir offensé, votre majesté.

    C'est vrai que si l'on conseille si souvent de rester dans les sentiers battus des bibliothèques largement testées dans le monde entier, ça n'a rien à voir avec la tendance des développeurs à se figurer qu'ils ont un problème trivial face à eux, quand ils n'ont simplement pas pensé à tous les cas de figure.

    Quant à cette impressionnante démonstration, je suppose qu'elle fonctionnerait tout pareil avec tous les caractères spéciaux, que les caractères de contrôle sont correctement gérés aussi, et que cette implémentation gère très bien le non-ASCII ou déclenche une erreur si on tente de transmettre ses résultats en non-unicode.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. Caractères spéciaux / Java parsing JSON
    Par franck06 dans le forum Langage
    Réponses: 2
    Dernier message: 25/04/2013, 16h37
  2. Transformer un objet Java en JSON
    Par otam2 dans le forum Développement Web en Java
    Réponses: 3
    Dernier message: 30/11/2012, 17h03
  3. API JSON Lib - Erreur java.lang.NoSuchMethod
    Par Marvelll dans le forum Format d'échange (XML, JSON...)
    Réponses: 0
    Dernier message: 29/01/2010, 11h04
  4. Java et JSON
    Par christoufe dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 20/02/2009, 13h16

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