JSonstrEam es una biblioteca que proporciona una API de transmisión de bajo nivel para leer y escribir JSON Markup. No se realiza una serialización o deserialización automática y no se crean objetos en la memoria. Como resultado, hay muy poca sobrecarga e incluso puede manejar el marcado JSON demasiado grande para caber en la memoria. El analizador también es tolerante a las fallas y puede informar y recuperarse de ciertos errores como anidación incorrecta o una coma faltante. Es fácil de usar y adaptarse a sus propios casos de uso.
Otras bibliotecas JSON hacen muchas cosas a la vez. Al analizar JSON, no solo analizan, sino que también convierten el marcado en un árbol de objetos, o incluso usan Reflection/RTTI para mapear automáticamente entre sus propios objetos y su representación JSON. El analizador en JSonstrEam, por otro lado, es solo un analizador. Lo que hace con los datos depende completamente de usted. Esto también significa que sus clases/estructuras/registros no tienen que ser una representación 1: 1 del JSON, que puede ser muy útil cuando se trabaja con las API JSON existentes.
Mientras que otras bibliotecas JSON lo obligan a definir la estructura JSON declarativamente, en JSonstrEam, la estructura se define como código, lo que lo hace mucho más flexible y expresivo. Por ejemplo, si hay un valor que puede ser null o un entero, simplemente puede probarlo, en lugar de tener que declarar un tipo especial Nullable<int> con un montón de métodos sobrecargados. A medida que su especificación JSON se vuelve más compleja, el enfoque declarativo adoptado por otras bibliotecas se vuelve difícil de leer y mantener, y resulta en un montón de código de horario básico. Terminas escribiendo código Turing-Complete usando la sintaxis de plantilla, que no es lo que quieres. JSonstrEam, por otro lado, solo le permite usar el lenguaje Turing-Complete ya a su disposición.
Lectura:
var
s: string;
i: integer;
...
begin
Stream := TStringStream.Create( ' ["Hello", "World", 42] ' );
Reader := TJsonReader.Create(Stream);
if Reader.List then
while Reader.Advance <> jsListEnd do
begin
if Reader.Str(s) then
WriteLn(s)
else if Reader.Number(i) then
WriteLn(i)
end ;
end ;Escribiendo:
begin
Stream := TIOStream.Create(iosOutput);
Writer := TJsonWriter.Create(Stream,[],true);
Writer.Dict;
Writer.Key( ' Hello ' );
Writer.Str( ' World ' );
Writer.Key( ' Flag ' );
Writer.Bool(true);
Writer.Key( ' Numbers ' );
Writer.List;
Writer.Number( 1 );
Writer.Number( 2 );
Writer.Number( 3 );
Writer.ListEnd;
Writer.DictEnd;
end ;=>
{
"Hello" : " World " ,
"Flag" : true ,
"Numbers" : [
1 ,
2 ,
3
]
}Encuentra más ejemplos aquí.
Esta biblioteca puede leer y escribir los siguientes estándares:
Se adhiere estrechamente a los estándares y se puede usar para validar o desinfectar el marcado JSON. Incluso puede continuar analizando después de un error, si lo desea. Vea un ejemplo para este uso en Pascal/Ejemplo/JSONECHO.
La biblioteca puede procesar entradas arbitrarias con características de tiempo de ejecución predecibles. Las cadenas y las claves de objetos se pueden procesar por fragmento por chunk utilizando los métodos StrBuf y KeyBuf , y por lo tanto no tienen que residir en la memoria en su totalidad. La semántica de estas funciones es similar a la read SYSCALL en los sistemas POSIX.
El tiempo requerido para analizar un archivo JSON está limitado por O (n + e*k), donde n es la longitud en bytes, e es el número de errores corregidos y k es la máxima profundidad de anidación. Para la mayoría de los casos de uso, abortar en el primer error está bien (también es el valor predeterminado), en cuyo caso el tiempo de ejecución se convierte en O (n). El uso de la memoria está limitado por O (k). Puede especificar una profundidad de anidación máxima permitida durante la inicialización. El analizador abortará una vez que se alcance este límite.
La salida puede ser bastante impresa si lo desea o usar una representación compacta sin espacio en blanco adicional.
Este repositorio tiene subcarpetas para las diversas implementaciones de idiomas de la biblioteca. Actualmente, la única implementación está escrita en Pascal, pero se planifican otras implementaciones (por ejemplo c).
Subcolleas:
| Carpeta | Descripción |
|---|---|
| pascal | Implementación de Pascal de JSonstrEAM |
Este proyecto tiene licencia bajo la licencia MIT.
Copyright 2021 Philip Zander
Permission is hereby granted, free of charge, to any person obtaining a copy of
this software and associated documentation files (the "Software"), to deal in
the Software without restriction, including without limitation the rights to
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
the Software, and to permit persons to whom the Software is furnished to do so,
subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.