Salta el contingut

DAM - DAW - MP 0484 Bases de Dades

Revisió BSON / JSON

RFC 4627 - The application/json Media Type for JavaScript Object Notation (JSON) (ietf.org)

JSON, o Notació d'Objectes de JavaScript (JavaScript Object Notation), és l'estàndard més popular per a l'intercanvi de dades a la web, en què es basa BSON (Binary JSON).

JSON va ser definit com a part del llenguatge JavaScript a principis dels 2000 i no va ser fins el 2013 que el format va ser oficialment especificat.

A mesura que JavaScript es va convertir en el llenguatge predeterminat del desenvolupament web del costat del client, JSON va començar a cobrar vida pròpia. Les seves principals virtuts són la seva fàcil llegibilitat per a humans i màquines i fàcil implementació en altres llenguatges.

JSON ràpidament va superar XML, que és més difícil de llegir per a un humà, significativament més detallat i menys adequat per representar estructures d'objectes utilitzades en els llenguatges de programació moderns.

Format JSON

El seu format bàsic està construït per dues estructures:

  • una col·lecció de parells clau/valor

  • una llista ordenada de valors.

En JSON, aquestes estructures es representen d’aquestes formes objecte o array:

  • objecte: { "clau" : valor , "clau" : valor }

json01Object

  • array: [ valor , valor , valor ]

json02Array

  • valor: false / null / true / objecte / array / number / stringexpl

json03Value

  • string:

json04String

  • numero:

json05Number

  • espai_en_blanc: espai | tabulador horitzontal | nova línia | retorn de carro

json06WhiteSpace

Exemple

{ "nom" : "Pilar", "cognom" : "Arc" , "edat" : 12 ,
  "aficions" : [ "pintura" , "viatges" , "vela"] ,
  "pares" : [ { "nom" : "Maria", "cognom" : "Jou"} ,
   { "nom" : "Josep", "cognom" : "Arc" } ] ,
  "estudis" : { "nivell" : "CFGS", "curs" : 1,
  "matricula" : true }}

o bé en forma d’arbre seria quelcom com ara:

{
  "nom" : "Pilar",
  "cognom" : "Arc" ,
  "edat" : 12 ,
  "aficions" : [
                 "pintura" , 
                 "viatges" ,
                 "vela"
  ] ,
  "pares" : [
             { 
                "nom" : "Maria",
                "cognom" : "Jou"
             } ,
             {
                "nom" : "Josep",
                "cognom" : "Arc"
             }
  ] ,
  "estudis" : { 
                "nivell" : "CFGS",
                "curs" : 1,
                "matricula" : true 
  }
}

Podem generar documents JSON aleatoris...

a la següent pàgina: https://www.json-generator.com/

o bé la nova versió: https://next.json-generator.com/

BSON

BSON simplement vol dir "JSON binari". L'estructura binària de BSON codifica informació de tipus i longitud, cosa que permet analitzar-la molt més ràpidament.

Des de la seva formulació inicial, BSON s'ha ampliat per afegir alguns tipus de dades opcionals no nadius de JSON, com ara dates i dades binàries, sense les quals a MongoDB li hauria faltat un suport valuós.

Els llenguatges que admeten qualsevol tipus de matemàtica complexa solen tenir nombres enters de diferents mides (ints vs longs) o diversos nivells de precisió decimal (float, double, decimal128, etc.).

No només és útil poder representar aquestes distincions en les dades emmagatzemades a MongoDB, sinó que també permet que les comparacions i els càlculs es facin directament en les dades de formes que simplifiquen el consum del codi de l'aplicació.

MongoDB emmagatzema dades en format BSON tant internament com a través de la xarxa, però això no vol dir que no es pugui pensar en MongoDB com una base de dades JSON.

Qualsevol cosa que pugui representar a JSON pot emmagatzemar-se de forma nativa a MongoDB i recuperar-se amb la mateixa facilitat a JSON.

Per exemple, MongoDB permet als desenvolupadors consultar i manipular objectes mitjançant claus específiques dins del document JSON/BSON, fins i tot en documents imbricats en moltes capes en un registre, i crear índexs d'alt rendiment en aquestes mateixes claus i valors.

JSON vs BSON

JSON BSON
Codificació Cadena UTF-8 Binària
Suport de dades String, Boolean, Number, Array String, Boolean, Number, (Integer, Float, Long, Decimal128, ...), Array, Date, Raw Binary
Llegibilitat Humana i màquina Només màquina