Overblog Tous les blogs Top blogs Technologie & Science Tous les blogs Technologie & Science
Editer l'article Suivre ce blog Administration + Créer mon blog
MENU

XML/JSON 比较

14 Mai 2013 Publié dans #json, #xml, #java

XML/JSON 比较

严禁转载,使用请注明出处:http://alex2012-c.j.overblog.com/

毕业论文一部分,比较了XML/JSON的区别,并且实际测试了二者传输所需要的时间:

Un système distribué est constitué d’un ensemble de postes de travail et de périphériques (avec ou sans des architectures matérielles et des systèmes d’exploitations différents) reliés entre eux par un système de communication.

Le transport des données via le réseau nécessite un format de données particulier. Ainsi, avant que les données ne soient transférées, elles doivent être modifiées dans un format, en fonction de la technique de sérialisation utilisée. Pour les programmeurs, la gestion des communications est une charge. Il s’agit de fiabiliser l’envoi et la réception des messages et assurer de bonnes vitesses de transmission de messages.

Pour assurer la compatibilité des données (surtout la structure et l’ordre) entre les systèmes différents, la méthode le plus utilisée est la sérialisation et désérialisation.

1. Formats de sérialisation et désérialisation

La sérialisation est une méthode permettant de convertir un objet ou une structure de données en un format qui peut être stocké (dans un fichier, ou une mémoire tampon, ou envoyé sur le réseau) et qui peut être reconstitué sur le même PC ou sur un autre. La méthode appliquée pour la sérialisation par le client doit être connue par le serveur afin que ce dernier sache quelle méthode de désérialisation il devra appliquer.

Il existe deux types de sérialisation ; la sérialisation de données (sérialisation juste des données, c’est-à-dire les attributs des objets) et la sérialisation d’objets (sérialisation de données et des méthodes de l’objet).

L’avantage de la sérialisation est la capacité de transmettre des données sur un réseau sous un format compatible sous différentes plateformes. Il peut résoudre le problème de comptabilité des architectures matérielles différentes et systèmes d’exploitation différents. Aussi, il peut générer un clone d’objet sous certain format.

Il y a aussi des faiblesses lors de la sérialisation et désérialisation : elle engendre l’augmentation de la charge de CPU ; elle va aussi prolonger le temps de transmission des données.

Les formats les plus utilisés sont JSON et XML :

2 JSON

JSON (JavaScript Object Notation – Notation Objet issue de JavaScript) est un format léger d'échange de données. C’est un format texte complètement indépendant de tout langage. Cependant, les conventions qu'il utilise sont familières à tout programmeur habitué au langage C et à ses descendants. Par exemple C++, C#, Java, JavaScript, Perl, Python.

Il existe de nombreuses librairies, sous différents langages, qui permettent de sérialiser/désérialiser des données aux formats JSON. En C++, nous pouvons citer RapidJson, JsonCpp, LibJson, Jsonkit, …

Dans le cadre de notre étude, les librairies RapidJson et JsonCpp ont été présélectionnées pour être implémentées et comparées :

  • RapidJson : Cette librairie est petite et complète. Elle supporte les API SAX et DOM. Elle est rapide et supporte UTF-8, UTF-16 et UTF-32.
  • JsonCpp : C’est une librairie qui permet d’écrire et de lire des documents JSON.

JSON se base sur deux structures :

  • Une collection de couples (nom/valeur). Divers langages la font correspondre à un objet, un enregistrement, une structure, un dictionnaire, une table de hachage, une liste typée ou un tableau associatif.
  • Une liste de valeurs ordonnées. La plupart des langages la font correspondre à un tableau, un vecteur, une liste ou une suite.

Une chaîne de caractère au format JSON ne doit pas contenir de déclaration de méthode, mais uniquement des données. Ces données peuvent être soient des nombres, des chaînes de caractères Unicode encadrées par " ", ou des booléens.

De manière générale, nous avons les définitions suivantes :

  • Un objet est un ensemble de couples non ordonnés. Un objet commence par "{" et se termine par "}". Chaque nom est suivi de ":" et les couples sont séparés par ",".
  • Un tableau est une collection de données ordonnées. Il commence par "[" et se termine par "]". Les valeurs sont séparées par des ",".

Si nous faisons la sérialisation sur l’information de la gare, nous avons :

{
    "gare":
    {
        "gareNom": "Paris Gare de Lyon",
        "listeTrain":
        {
            "train0":
            [
                { "numeroTrain": "RIPO45" },
                { "heureArriver": "11h12" },
                { "heureDepart": "11h15" }
            ]
        }
    }
}

Avantages

Les principaux avantages que présente l’utilisation du format JSON sont les suivants :

  • Les types de données sont suffisamment génériques pour pouvoir représenter n’importe quelle donnée concrète et être utilisés dans n’importe quel langage de programmation.
  • Peu verbeux ; ce qui le rend lisible aussi bien par un humain que par une machine.
  • Facile à apprendre car sa syntaxe est réduite et non-extensible.
  • Permet une vitesse de traitement plus significative pour des volumes de données importants.

Inconvénients

Le principal inconvénient est qu’il faille connaître à l’avance la structure des données à sérialiser. Nous pouvons également citer comme inconvénient le fait qu’un nombre limité de type de données puisse être supporté par JSON.

3 XML

XML (eXtensible Markup Langage – Langage à balises extensible) est un format de description de données et non de leur représentation. Ce qui permet par exemple d’afficher un même document sur des applications ou des périphériques différents sans nécessiter de créer autant de versions du document que l’on nécessite de représentations. La mise en page des données est assurée par un langage de mise en page tiers.

XML fournit un moyen de vérifier la syntaxe d'un document grâce aux DTD (Document Type Definition). Il s'agit d'un fichier décrivant la structure des documents y faisant référence grâce à un langage adapté. Ainsi un document XML doit suivre scrupuleusement les conventions de notation XML et peut éventuellement faire référence à une DTD décrivant l'imbrication des éléments possibles.

Il est donc essentiel pour le receveur d'un document XML de pouvoir en extraire les données. Cette opération est possible à l'aide d'un outil appelé parseur. Le parseur permet d'extraire les données d'un document XML ainsi que de vérifier éventuellement la validité du document. Les parseurs sont des librairies qui existent dans différents langages de programmation (C, C++, Java, Perl, …).

Il existe de nombreuses librairies. En C++, nous pouvons citer Libxml++, Tinyxml, Pugixml. Dans le cadre de notre étude, la librairie Pugixml a été présélectionnée pour être implémentée.

Pugixml est une librairie légère qui permet de construire une arborescence de DOM à partir d’un fichier/d’une mémoire tampon XML. Elle supporte les deux jeux de caractères codés universel (UCS – Universal Coded Character Set). La librairie est facile à intégrer et à utiliser.

Avantages

Les principaux avantages que présente l’utilisation du format XML sont les suivants :

  • Les données sont structurées dans des fichiers textes.
  • XML est standard. De nombreuses librairies existent sous différents langages de programmation.
  • La syntaxe à suivre est stricte. Ce qui permet de garantir que le document est toujours lisible. Le document peut être ouvert avec Explorer pour détecter d’éventuelles erreurs.
  • Les fichiers XML sont structurés et hiérarchiques.
  • Des commentaires peuvent être ajoutés dans les fichiers sans casser la structure.

Inconvénients

Le principal inconvénient est que le XML est très verbeux. Les fichiers sont très volumineux.

4.4 Comparaison des performances

Nous avons évalué le temps de sérialisation et désérialisation qu’il faut en utilisant

  • JsonCPP
  • PugiXml

Nous avons sur un même ordinateur, un serveur et un client qui tourne. Le client envoie 1 000, 10 000 et 50 000 objets sérialisés. Le serveur les reçoit et les désérialise. Les temps évalués incluent uniquement le temps de sérialisation et de désérialisation ; la connexion entre serveur et client est établie une fois pour toute.

Les objets échangés – Gare – sont des objets imbriqués.

Gare {Listes des trains

Liste des conducteurs {Listes de trains}

}

10 000 messages

50 000 messages

100 000 messages

500 000 messages

JsonCPP (ms)

6 520

31 985

55 885

318 361

PugiXml (ms)

6 834

32 003

61 308

316 034

D’après les résultats des tests de performance, nous pouvons conclure que pour des volumes de données importants, il est préférable d’utiliser JsonCPP.

Sachant que pour la remontée des données des systèmes CATI vers le serveur SQL, les volumes des données sont assez faibles, nous pouvons utiliser aussi bien le format XML que JSON.

Publicité
Partager cet article
Repost0
Pour être informé des derniers articles, inscrivez vous :
Commenter cet article