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

Est-ce que DOM est le seul moyen d’parsingr JSON?

Certains parsingurs JSON offrent un parsingur incrémentiel (“en continu”); pour Java, au moins les parsingurs suivants de la page json.org offrent une telle interface:

  • Jackson (interface de traction)
  • Json-simple (interface push de style SAX)

(en plus de l’parsingur de Software Monkey mentionné par une autre réponse )

En fait, il est étrange que tant d’parsingurs JSON ne proposent PAS cette interface simple de bas niveau – après tout, ils ont déjà besoin d’implémenter une parsing de bas niveau, alors pourquoi ne pas l’exposer.

EDIT (juin 2011): Gson a aussi sa propre API de streaming (avec gson 1.6)

Par DOM, je suppose que vous voulez dire que l’parsingur lit un document entier avant de pouvoir l’utiliser. Notez que dire DOM a tendance à impliquer XML, ces jours-ci, mais IMO n’est pas vraiment une inférence précise.

Donc, en réponse à vos questions – “Oui”, il y a des API de streaming et “No”, DOM n’est pas la seule solution. Cela dit, le traitement d’un document JSON en tant que stream est souvent problématique car de nombreux objects ne sont pas de simples paires champ / valeur, mais contiennent d’autres objects en tant que valeurs, que vous devez parsingr pour traiter et cela devient récursif. Mais pour les messages simples, vous pouvez faire des choses utiles avec un parsingur basé sur les stream / événements.

J’ai écrit un parsingur d’événements pull pour JSON (il s’agissait d’une classe, environ 700 lignes). Mais la plupart des autres que j’ai vus sont orientés vers les documents. L’un des calques que j’ai construits au-dessus de mon parsingur est un lecteur de documents, qui prend environ 30 LOC. En pratique, je n’ai utilisé mon parsingur que comme chargeur de document (pour la raison ci-dessus).

Je suis sûr que si vous effectuez une recherche sur le net, vous trouverez des parsingurs de type pull et push pour JSON.

EDIT: J’ai posté l’parsingur sur mon site pour le télécharger. Une classe de compilation compilable et un exemple complet sont inclus.

EDIT2: Vous souhaiterez également consulter le site Web JSON .

Comme StefanB l’a mentionné, http://lloyd.github.com/yajl/ est une bibliothèque C pour l’parsing du stream JSON. Il existe également de nombreux wrappers mentionnés sur cette page pour d’autres langages:

  • yajl-ruby – reliures rbuy pour YAJL
  • yajl-objc – Liaisons Objective-C pour YAJL
  • Liaisons YOJL IO (pour la langue IO)
  • Les liaisons Python existent en deux versions, py-yajl OU yajl-py
  • yajl-js – liaisons node.js (en miroir avec github).
  • lua-yajl – reliures lua
  • ooc-yajl – liaisons ooc
  • yajl-tcl – liaisons tcl

certains d’entre eux ne permettent pas le streaming, mais beaucoup d’entre eux le font certainement.

Disclaimer: Je suggère mon propre projet.

Je maintiens un parsingur JSON en streaming en Javascript qui combine certaines des fonctionnalités de SAX et DOM:

Site web Oboe.js

L’idée est d’autoriser l’parsing syntaxique en continu, mais ne nécessite pas que le programmeur écoute de nombreux événements différents, comme avec le SAX brut. J’aime SAX mais il a tendance à être assez bas pour ce que la plupart des gens ont besoin. Vous pouvez écouter tout noeud intéressant du stream JSON en enregistrant les modèles JSONPath.

Le code est sur Github ici:

Page Oboe.js Github

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 la clarinette:

https://github.com/dscape/clarinet

L’parsingur est basé sur des événements, et comme il est en streaming, il est possible de traiter des fichiers volumineux. L’API est très proche de sax et le code est créé à partir de sax-js.

LitJSON prend en charge une API de style streaming. Citant du manuel :

“Une interface alternative pour gérer les données JSON qui pourraient être familières à certains développeurs consiste à utiliser des classes qui permettent de lire et d’écrire des données de manière similaire à un stream. Ces classes sont JsonReader et JsonWriter .

“Ces deux types sont en fait à la base de cette bibliothèque, et le type JsonMapper est construit dessus. Le développeur peut donc considérer les classes de lecteurs et d’écrivains comme une interface de programmation de bas niveau pour LitJSON.”

Voici une bibliothèque NodeJS NPM pour parsingr et gérer les stream JSON: https://npmjs.org/package/JSONStream

Si vous recherchez spécifiquement Python, ijson prétend le prendre en charge. Cependant, ce n’est qu’un parsingur, donc je n’ai rien trouvé pour Python capable de générer json en tant que stream.

Pour C ++, rapidjson prétend prendre en charge l’parsing et la génération en continu.

Pour Python, une alternative (apparemment plus légère et plus efficace) à ijson est jsaone (voir ce lien pour des tests de performances approximatifs, montrant que jsaone est environ 3 fois plus rapide).

CLAUSE DE NON- RESPONSABILITÉ : Je suis l’auteur de jsaone et les tests que j’ai effectués sont très basiques … Je serai ravi d’avoir tort.

Répondre au titre de la question: YAJL une bibliothèque d’parsingurs JSON en C:

YAJL se souvient de tous les états requirejs pour prendre en charge le redémarrage de l’parsing. Cela permet une parsing incrémentielle à mesure que les données sont lues sur un disque ou un réseau.

Donc, je suppose que l’utilisation de Yajl pour parsingr JSON peut être considérée comme un stream de traitement de données.

En réponse à votre 2ème question, non, de nombreuses langues ont des parsingurs JSON. PHP, Java, C, Ruby et bien d’autres. Juste Google pour la langue de votre choix, plus “parsingur JSON”.