print parse ejemplo array javascript .net json json.net bson

parse - return json javascript



Compara JSON y BSON (1)

La eficacia de JSON frente a BSON depende del tamaño de los enteros que está almacenando. Hay un punto interesante en el que ASCII ocupa menos bytes que el almacenamiento de tipos enteros. Los enteros de 64 bits, que es como aparece su documento BSON, ocupan 8 bytes. Sus números son todos menos de 10,000, lo que significa que puede almacenar cada uno en ASCII en 4 bytes (un byte para cada personaje hasta 9999). De hecho, la mayoría de sus datos parecen ser menos de 1000, lo que significa que se pueden almacenar en 3 o menos bytes. Por supuesto, esa deserialización lleva tiempo y no es barata, pero ahorra espacio. Además, Javascript usa valores de 64 bits para representar todos los números, por lo que si lo escribió a BSON después de convertir cada entero a un formato de datos más apropiado, su archivo BSON podría ser mucho más grande.

De acuerdo con la especificación, BSON contiene muchos metadatos que JSON no contiene. Estos metadatos son en su mayoría prefijos de longitud, por lo que puede omitir datos que no le interesan. Por ejemplo, tome los siguientes datos:

["hello there, this is an necessarily long string. It''s especially long, but you don''t care about it. You''re just trying to get to the next element. But I keep going on and on.", "oh man. here''s another string you still don''t care about. You really just want the third element in the array. How long are the first two elements? JSON won''t tell you", "data_you_care_about"]

Ahora, si está utilizando JSON, tiene que analizar la totalidad de las dos primeras cadenas para saber dónde está el tercero. Si usas BSON, obtendrás un marcado más parecido (pero no en realidad, porque estoy haciendo este marcado por el ejemplo):

[175 "hello there, this is an necessarily long string. It''s especially long, but you don''t care about it. You''re just trying to get to the next element. But I keep going on and on.", 169 "oh man. here''s another string you still don''t care about. You really just want the third element in the array. How long are the first two elements? JSON won''t tell you", 19 "data_you_care_about"]

Así que ahora, puede leer ''175'', saber saltar 175 bytes hacia adelante, luego leer ''169'', saltar hacia adelante 169 bytes, y luego leer ''19'' y copiar los siguientes 19 bytes a su cadena. De esa forma ni siquiera tiene que analizar las cadenas de delimitadores.

Usar uno frente al otro depende mucho de tus necesidades. Si vas a almacenar enormes documentos que tienes todo el tiempo del mundo para analizar, pero tu espacio en el disco es limitado, usa JSON porque es más compacto y eficiente en el uso del espacio. Si va a almacenar documentos, pero reducir el tiempo de espera (quizás en un contexto de servidor) es más importante para usted que guardar un poco de espacio en el disco, use BSON.

Otra cosa a considerar en su elección es la legibilidad humana. Si necesita depurar un informe de bloqueo que contiene BSON, probablemente necesite una utilidad para descifrarlo. Probablemente no solo conozcas a BSON, sino que puedes leer JSON.

FAQ

Estoy comparando JSON y BSON para serializar objetos. Estos objetos contienen varias matrices de una gran cantidad de enteros. En mi prueba, el objeto que estoy serializando contiene una cantidad total de aproximadamente 12,000 enteros. Solo me interesa cómo se comparan los tamaños de los resultados serializados. Estoy usando JSON.NET como la biblioteca que hace la serialización. Estoy usando JSON porque también quiero poder trabajar con él en Javascript.

El tamaño de la cadena JSON es de aproximadamente 43kb y el tamaño del resultado BSON es de 161kb. Entonces, un factor de diferencia de aproximadamente 4. Esto no es lo que esperaba porque miré a BSON porque pensé que BSON es más eficiente en el almacenamiento de datos.

Entonces mi pregunta es por qué BSON no es eficiente, ¿puede hacerse más eficiente? ¿O hay otra forma de serializar datos con matrices que contienen una gran cantidad de enteros, que se pueden manejar fácilmente en Javascript?

A continuación encontrará el código para probar la serialización JSON / BSON.

// Read file which contain json string string _jsonString = ReadFile(); object _object = Newtonsoft.Json.JsonConvert.DeserializeObject(_jsonString); FileStream _fs = File.OpenWrite("BsonFileName"); using (Newtonsoft.Json.Bson.BsonWriter _bsonWriter = new BsonWriter(_fs) { CloseOutput = false }) { Newtonsoft.Json.JsonSerializer _jsonSerializer = new JsonSerializer(); _jsonSerializer.Serialize(_bsonWriter, _object); _bsonWriter.Flush(); }

Editar:

Aquí están los archivos resultantes https://skydrive.live.com/redir?resid=9A6F31F60861DD2C!362&authkey=!AKU-ZZp8C_0gcR0