Dois-je utiliser YAML ou JSON pour stocker mes Perl données?
J'ai été en utilisant le format YAML avec un certain succès dans les 6 derniers mois ou ainsi.
Cependant, la pure Perl mise en œuvre de l'analyseur syntaxique YAML est assez
agité de la main-d'écrire un fichier lisible et a (à mon avis)
ennuyeux bizarreries telles que l'obligation d'un retour à la ligne à la fin du fichier. C'est aussi
gigantically lent par rapport au reste de mon programme.
Je suis à réfléchir à la prochaine évolution de mon projet, et je suis en train d'étudier
à l'aide de JSON à la place (surtout un sous-ensemble strict de YAML, il s'
out). Mais le format qui a le plus de communauté de traction et de l'effort en Perl?
Qui semble aujourd'hui le mieux à long terme de format pour de simples
la description des données en Perl, YAML ou JSON, et pourquoi?
- Pouvez-vous donner un exemple de la date à laquelle vous êtes en train de parler?
- Disons que toutes les données des feuilles est générique scalaires perl. - Je combiner les scalaires dans les tableaux et perl les tables de hachage. Les tableaux et les tables de hachage peut avoir des éléments de tableaux et hachages. C'est assez vanille structure de données des trucs. 🙂
- J'ai trouvé YAML::Minuscule pour être fiable, et pur Perl, aussi longtemps que vous êtes prêt à accepter ses limites.
- Que faites-vous avec les données, et qui d'autre a consommer? Il n'y a pas de réponse générale, vraiment.
json
si jamais vous avez besoin de transmettre ces données autour de.yaml
seulement si vous envisagez de modifier par hnad (fichiers de configuration) ou que vous souhaitez afficher (par exemple config/résultats dump)
Vous devez vous connecter pour publier un commentaire.
YAML vs JSON est quelque chose de très bien qui ne sont pas réglés en Perl, et j'avoue que j'ai tendance à être dans le milieu de la. Je voudrais des conseils que ce soit, va vous recevoir à peu près autant de la communauté de traction. Je voudrais faire la décision en se basant sur les avantages et les inconvénients des formats. Je suis en panne les différentes données de la sérialisation des options comme si (je vais le wiki de la communauté ce afin que les gens peuvent ajouter):
YAML Pros
YAML Contre
JSON Pros
JSON Contre
XML Pros
XML Cons
Perl/Data::Dumper Pros
Perl/Data::Dumper Contre
Stockables Pros
Stockables Contre
Comme avec la plupart des choses, ça dépend. Je pense que si vous voulez de la vitesse et de l'interopérabilité (avec d'autres langues), l'utilisation de JSON, en particulier JSON::XS.
Si vous voulez quelque chose qui ne va jamais être utilisé par des modules Perl, bâton avec YAML. C'est beaucoup plus courant de trouver Perl modules sur CPAN qui prennent en charge la description des données avec YAML, ou qui dépendent de YAML, que JSON.
Remarque que je ne suis pas une autorité, et cette opinion est largement basé sur l'intuition et de la conjecture. En particulier, je n'ai pas profilé JSON::XS vs YAML::XS. Si je suis offensivement ignorants, je ne peux qu'espérer que je vais faire à quelqu'un en colère assez pour apporter de l'information utile à la discussion par la correction de moi.
Il est tout au sujet de l'homme-la lisibilité, si ce est votre préoccupation principale, choisissez YAML:
YAML:
JSON:
La pure Perl YAML mise en œuvre (
YAML
module par opposition àYAML::Syck
) semble avoir de sérieux problèmes. J'ai récemment rencontré des problèmes où il n'a pas pu traiter YAML documents avec des lignes très longues (32k caractères ou moins).YAML est capable de stocker et de charger le bienheureux variables et le fait en
par défaut (L'extrait ci-dessous a été copié à partir d'un
*sepia-repl*
tamponEmacs):
C'est assez effrayant de vue de la sécurité, car les données non fiables peuvent être utilisés
pour appeler n'importe quel
DESTROY
méthode qui a été définie dans votre application- ou l'un des modules qu'il utilise.
Court programme illustre le problème:
JSON ne le permet pas par défaut -- il est possible de sérialiser
Perl "objets", mais pour ce faire, vous devez définir TO_JSON
des méthodes.
Load
fonction?si vous envisagez de JavaScript Object Notation, pourquoi ne pas utiliser "Perl Object Notation"?
JSON:
Perl:
Vous pourriez aussi envisager d'utiliser Stockables. Vous obtiendrez probablement un très bon boost de vitesse avec elle. Les inconvénients sont:
- Je utiliser YAML pour le suivi de l'état du processus parce que je peux lire YML dans le milieu du processus. Vous (techniquement) doivent entièrement formé des documents à lire XML ou JS. YAML est agréable pour le suivi de l'état parce que vous pouvez écrire beaucoup de mini-docs dans un fichier. Sinon, j'ai l'habitude d'aller avec XML ou JS. Bon résumé de pros & les inconvénients ci-dessus, btw.