Domanda Il lettore / scrittore JSON più veloce per C ++ [chiuso]


Ho bisogno di un parser e scrittore JSON C ++. La velocità e l'affidabilità sono molto critiche, non mi interessa se l'interfaccia è bella o meno, se è basata su Boost o meno, anche un parser C va bene (se è considerevolmente più veloce di quelli C ++).

Se qualcuno ha esperienza con la velocità dei parser JSON disponibili, si prega di avvisare.


45
2017-08-18 13:36


origine


risposte:


http://lloyd.github.com/yajl/ 

http://www.digip.org/jansson/

Non so davvero come si raffronta per la velocità, ma la prima sembra l'idea giusta per ridimensionare i dati JSON veramente grandi, poiché analizza solo un piccolo blocco alla volta in modo che non debbano contenere tutti i dati in memoria in una volta (questo può essere più veloce o più lento a seconda della libreria / caso d'uso)


9
2017-08-18 14:01



rapidjson è un parser / generatore JSON C ++ progettato per essere un footprint di memoria veloce e di piccole dimensioni.

C'è un confronto delle prestazioni con YAJL e JsonCPP.


Aggiornare:

Ho creato un progetto open source Benchmark Native JSON, che valuta 29 (e in aumento) librerie JSON C / C ++, in termini di conformità e prestazioni. Questo dovrebbe essere un riferimento utile.


61
2017-11-14 09:30



https://github.com/quartzjer/js0n

Interfaccia più brutta possibile, ma fa quello che chiedi. Assegnazioni zero.

http://zserge.com/jsmn.html Un altro approccio di allocazione zero.

Le soluzioni pubblicate soprattutto eseguono l'allocazione dinamica della memoria, quindi a un certo punto saranno inevitabilmente più lente, a seconda della struttura dei dati, e saranno pericolose da includere in un ambiente con heap limitato come un sistema embedded.

Benchmark di vjson, rapidjson e sajson qui: http://chadaustin.me/2013/01/json-parser-benchmarking/ se sei interessato a quel genere di cose.

E per rispondere alla tua parte "scrittore" della domanda dubito che tu possa battere un efficiente

printf("{%s:%s}",name,value)

implementazione con qualsiasi libreria - presumendo che l'implementazione di printf / sprintf sia di per sé leggera.

EDIT: in realtà mi permetta di riprenderlo, RapidJson consente l'allocazione on-stack solo attraverso il suo MemoryPoolAllocator e in effetti lo rende un default per il suo GenericReader. Non ho fatto il confronto ma mi aspetterei che sia più robusto di qualsiasi altra cosa elencata qui. Inoltre non ha alcuna dipendenza e non genera eccezioni che probabilmente lo rendono in definitiva adatto per l'embedded. Completamente basato su header, quindi facile da includere ovunque.


6
2017-08-11 16:27