DOM est-il le seul moyen d’analyser JSON?
Réponses
Trop de publicités?Certains JSON analyseurs n'offre supplémentaire ("streaming") analyseur; pour Java, au moins suivant les analyseurs de json.org page offre une interface:
- Jackson (extraction de l'interface)
- Json simple (SAX-style push interface)
(en plus du Logiciel de Singe analyseur visée par une autre réponse)
En fait, c'est bizarre que tant de JSON analyseurs n'offre PAS cette simple interface de bas niveau-après tout, ils ont déjà besoin pour mettre en œuvre le faible niveau de l'analyse, alors pourquoi ne pas les exposer.
EDIT (juin 2011): Gson trop a sa propre API de diffusion en continu (avec gson 1.6)
Par DOM, je suppose que vous voulez dire que l'analyseur lit l'ensemble d'un document à la fois avant de pouvoir travailler avec elle. Notez que le fait de dire DOM tend à impliquer XML, ces jours-ci, mais IMO c'est pas vraiment un précis de l'inférence.
Ainsi, en réponse à vos questions - "Oui", il y a de streaming API et "Non", DOM n'est pas la seule façon. Cela dit, le traitement d'un document JSON comme un flux de données est souvent problématique dans la mesure où de nombreux objets ne sont pas simple champ/valeur paires, mais contenir d'autres objets de valeurs, dont vous avez besoin pour analyser le processus, ce qui tend à mettre fin à une récursif chose. Mais pour des messages simples, vous pouvez faire des choses utiles avec un flux d'événements en fonction de l'analyseur.
J'ai écrit un pull-événement parser JSON (il était une classe, à environ 700 lignes). Mais la plupart des autres, j'ai vu un document orienté. L'une des couches, j'ai construit sur le haut de mon parser est un lecteur de documents, qui a pris environ 30 LOC. Je n'ai jamais utilisé mon analyseur dans la pratique comme un chargeur de document (pour la raison invoquée ci-dessus).
Je suis sûr que si vous recherchez le net, vous trouverez de traction et de poussée en fonction des analyseurs de JSON.
EDIT: j'ai posté l'analyseur de mon site pour le téléchargement. Un travail compilable classe et un exemple complet est inclus.
EDIT2: Vous aurez également besoin de regarder le JSON site web.
Comme stefanB mentionné, http://lloyd.github.com/yajl/ est une bibliothèque C pour le volet analyse JSON. Il y a également de nombreux gestionnaires mentionnés sur cette page pour les autres langues:
- yajl-ruby ruby liaisons pour YAJL
- yajl-objc - Objective-C liaisons pour YAJL
- YAJL IO liaisons (pour les IO de la langue)
- Liaisons Python sont disponibles en deux saveurs, py-yajl OU yajl-py
- yajl-js - node.js les fixations (en miroir sur github).
- lua-yajl - lua liaisons
- ooc-yajl - ooc liaisons
- yajl-tcl tcl liaisons
certains d'entre eux peuvent ne pas autoriser la diffusion, mais beaucoup d'entre eux le font certainement.
Avertissement: je suggère de mon projet.
J'maintenir un flux JSON de l'analyseur en Javascript qui combine certaines des caractéristiques de SAX et DOM:
L'idée est d'autoriser la diffusion de l'analyse, mais ne pas exiger le programmeur à écouter beaucoup de différents événements comme des brutes SAX. J'aime SAX, mais il a tendance à être assez bas niveau pour ce que la plupart des gens ont besoin. Vous pouvez écouter tout intéressant nœud à partir du flux JSON en vous inscrivant JSONPath modèles.
Le code est sur Github ici:
Si vous voulez utiliser du javascript pur et une bibliothèque qui s'exécute à la fois dans node.js et dans le navigateur, vous pouvez essayer clarinette:
https://github.com/dscape/clarinet
L'analyseur est basé sur des événements et, comme il est en streaming, il permet de traiter des fichiers volumineux. L'API est très proche de sax et le code est dérivé de sax-js.