68 votes

Existe-t-il une API en continu pour JSON ?

DOM est-il le seul moyen d’analyser JSON?

59voto

StaxMan Points 34626

Certains JSON analyseurs n'offre supplémentaire ("streaming") analyseur; pour Java, au moins suivant les analyseurs de json.org page offre une 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)

22voto

Lawrence Dol Points 27976

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.

14voto

pykler Points 131

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.

8voto

joombar Points 56

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:

Oboe.js site web

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:

Oboe.js page Github

7voto

dscape Points 1145

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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X