J’ai besoin d’un parsingur et d’un parsingur JDS C ++. La vitesse et la fiabilité sont très critiques, peu importe si l’interface est agréable ou non, si elle est basée sur Boost ou pas, même un parsingur C est correct (s’il est beaucoup plus rapide que ceux en C ++).
Si quelqu’un a l’expérience de la vitesse des parsingurs JSON disponibles, veuillez en informer.
Je ne sais pas vraiment comment ils se comparent pour la vitesse, mais le premier ressemble à la bonne idée pour évoluer vers de très grandes données JSON, car il parsing uniquement un petit bloc à la fois pour qu’ils n’aient pas besoin de contenir toutes les données. mémoire à la fois (cela peut être plus rapide ou plus lent selon la bibliothèque / le cas d’utilisation)
rapidjson est un parsingur / générateur JSON C ++ conçu pour être rapide et peu encombrant.
Il existe une comparaison des performances avec YAJL et JsonCPP.
Mettre à jour:
J’ai créé un benchmark JSON natif de projet open source, qui évalue 29 bibliothèques JSON C / C ++ (en nombre croissant) en termes de conformité et de performances. Cela devrait être une référence utile.
https://github.com/quartzjer/js0n
Interface la plus laide possible, mais fait ce que vous demandez. Allocation zéro.
http://zserge.com/jsmn.html Une autre approche sans allocation.
Les solutions affichées avant tout font l’allocation dynamic de la mémoire, donc elles seront inévitablement plus lentes à un moment donné, en fonction de la structure des données – et seront dangereuses à inclure dans un environnement restreint comme un système embarqué.
Les références de vjson, rapidjson et sajson ici: http://chadaustin.me/2013/01/json-parser-benchmarking/ si vous êtes intéressé par ce genre de choses.
Et pour répondre à votre partie “écrivain” de la question, je doute que vous puissiez battre un efficace
printf("{%s:%s}",name,value)
implémentation avec n’importe quelle bibliothèque – en supposant que votre implémentation de printf / sprintf soit elle-même légère bien sûr.
EDIT: en fait, permettez-moi de revenir en arrière, RapidJson permet une allocation sur stack uniquement via son MemoryPoolAllocator et en fait un défaut pour son GenericReader. Je n’ai pas fait la comparaison mais je m’attendrais à ce qu’il soit plus robuste que tout ce qui est énuméré ici. Il n’a pas non plus de dépendances, et il ne jette pas d’exceptions qui le rendent probablement finalement compatible avec l’incorporation. Libération entièrement basée sur les en-têtes, facile à inclure n’importe où.