Z dobrze napisany parsera JSON, XML i będzie mieć mniej więcej taki sam rozrządu. Możesz mieć wolny analizator składni JSON i szybki analizator składni XML.
Być może nieco wolniej dla XML, ponieważ składnia jest bardziej złożona niż JSON.
Ale wąskim gardłem będzie głównie czytanie z twardego dysku, a nie analizowanie zawartości.
Użyliśmy JSON dla klient/serwer naszego ORM, z kilku powodów (ale przekonasz innych, nie chcę, aby troll tutaj, po prostu rozmawiać z naszego małego eksperymentu):
- Podobnie jak XML, jest tekstowym, czytelnym dla człowieka formatem do reprezentowania prostych struktur danych i tablic asocjacyjnych (zwanych obiektami);
- Łatwiej jest czytać (zarówno dla ludzi, jak i maszyn), szybciej wdrażać i zwykle ma mniejszy rozmiar niż XML;
- Jest to bardzo wydajny format do buforowania danych;
- Jego układ pozwala na przepisanie w miejscu na poszczególne ciągi znaków UTF-8 o zerowym końcu, bez prawie żadnego zmarnowanego miejsca: ta funkcja jest używana do szybkiej, szybkiej konwersji JSON do tekstu wyników tabel bez przydzielania pamięci i kopiowania danych ;
- Jest obsługiwany natywnie przez język JavaScript, co czyni go idealnym formatowaniem serializacji w dowolnej aplikacji AJAX (tj. Web 2.0);
- Format JSON jest określony w dobrze znanym i prostym dokumencie RFC;
- Domyślnym kodowaniem tekstu dla JSON i naszej ORM jest UTF-8, który pozwala na przechowywanie i komunikację pełnego zestawu znaków Unicode;
- Jest to domyślny format danych używany przez usługi ASP.NET AJAX utworzone w Windows Communication Foundation (WCF) od .NET framework 3.5; więc oficjalnie Microsoft jest "gotowy";
- Dla transmisji binarnej blob, nie ma CDATA jak w XML. Więc po prostu kodujemy dane binarne jako szesnastkowe lub Base64 (zużywa mniej miejsca) wewnątrz ciągu JSON.
Informacje na temat szybkości analizowania można znaleźć w naszym in-place parser and JSON writer from SQLite3 results. Był bardzo zoptymalizowany pod kątem szybkości i szybki. Napisaliśmy proste, ale efficient JSON serialization dla każdego TPersistent, w tym kolekcje. Dodajemy tylko a dynamic array JSON serializer, który jest również bardzo szybki.
Dodatkowa uwaga:
Wszystkie te Parsery różnić się od tej, którą wspominamy, bo analizowania zawartości JSON i sformatować go jako tekst wewnątrz bufora wejściowego: nie ma alokacja pamięci wykonane podczas parsowania, tak jak powinien być szybszy niż inne rozwiązania. Treść tekstowa jest unieruchomiona, pola zakończone są # 0 i obliczany jest wskaźnik do początku tekstu. Aby uzyskać dostęp do wartości, wystarczy użyć wskaźnika, aby uzyskać dane. Zwykle parsuje trochę MB treści JSON bez żadnego czasu.
Zobacz także JSON parser embedded in DWS. Autor twierdził, że jest szybki. Ale nadal przydzielono blok pamięci dla każdego obiektu.
Informacje o naszych analizach składniowych JSON w miejscu i technologiach parsera XML DOM/SAX można znaleźć na stronie http://blog.synopse.info/post/2011/06/02/Fast-JSON-parsing –
@ Bouchez: czy twój parser JSON jest dostępny dla innych użytkowników? Jeśli tak, czy mógłbyś podać linki do pobrania? Dziękujemy – costa
Parser jest dostępny w naszym [SynCommons.pas unit] (http://synopse.info/fossil/finfo?name=SynCommons.pas), jako zestaw funkcji niskiego poziomu. Nie ma klas wysokiego poziomu zdolnych do bezpośredniej konwersji dowolnego rodzaju treści JSON do drzewa, ponieważ staramy się unikać takiego procesu zużywania pamięci i procesora w mORMot, a polegamy na prostych obiektach lub tablicach. Ale masz potężne funkcje JSONToObject() i ObjectToJSON(). –