| Extension |
.cbor |
|---|---|
| Type MIME |
application/cbor |
| Version initiale | |
| Type de format |
sérialisation d'informations |
| Norme |
RFC 8949 |
| Site web |
(en) cbor.io |
CBOR (Concise Binary Object Representation en anglais) est un format d'échange de données informatiques d'utilisation générale pouvant être utilisé pour le stockage ou le transfert de données. C'est un format binaire de sérialisation de données dont les types sont inspirés du JSON permettant de représenter des structures de données simples et des tableaux associatifs, et d'étendre le format à d'autres types. L'objectif de ce format est de produire une forme binaire concise et extensible sans négociation de version de format.
La spécification du CBOR est disponible dans la RFC 8949.
Les types sont regroupés en 8 types majeurs dont le numéro est codé sur 3 bits :
Les 5 bits restant du premier octet sont utilisés pour indiquer soit la valeur (si elle est comprise entre 0 et 23) ou le nombre d'octets qui suivent :
Les types composés (tableaux simples, tableaux associatifs, chaînes de caractères ou d'octets) peuvent être encodés en spécifiant le nombre d'éléments avant le contenu, ou bien en mode non déterminé à l'avance en utilisant une valeur spéciale indiquant la fin.
Le code 7 réunit les valeurs simples.
| Valeur | Signification |
|---|---|
| 20 | true |
| 21 | false |
| 22 | nul |
| 23 | non défini |
| 31 | break |
Les entiers (types 0 et 1) ainsi que les longueurs sont encodés sur 1 à 4 octets en big-endian.
Un entiers positifs ou nuls peut prendre les valeurs de 0 à . Un entier négatif peut prendre les valeurs de à -1. Pour les entiers négatifs la valeur écrite est égale à . Ainsi la valeur -500 sera écrite 0b001_11001 (entier négatif sur 2 octets) suivi de 0x01f3 (valeur 499).
Les nombres flottants utilisent le code 7 et la valeur
Une chaîne commence par indiquer le nombre d’octets dans la chaîne. Les textes doivent être encodés en UTF-8 sans octet nul final. Aucun échappement de caractères (comme \n, \t ou \" en JSON) n’est nécessaire.
Un tableau est une suite de valeurs. Chaque valeur peut être d’un type différent. Un tableau commence par indiquer sa longueur puis chaque valeur est encodée séparément en CBOR (type + valeur).
Dans le tableau associatif, les valeurs vont par paires et sont nommées clé-valeur. Contrairement à d’autres format, la clé n’est pas obligatoirement un texte : la clé et la valeur peuvent utiliser n’importe quel type CBOR.
Pour les chaînes et les tableaux, le numéro de type peut être suivi de la valeur spéciale 31 (dans le premier octet). Un tableau se poursuit jusqu’à un objet de type 7 et de valeur 31 (0xFF) nommé « break ».
Une chaîne de caractères de longueur indéterminée sera écrite comme une liste de petits morceaux de textes de tailles connues suivit d’un objet break.
5F -- Texte de longueur indéfinie
45 -- Texte de longueur 5
48656C6C6F -- "Hello"
43 -- Texte de longueur 2
2021 -- " !"
FF -- break
Le type majeur étiquette permet d'étendre le format en indiquant quelle est l'interprétation à donner à l'item qui suit. Par exemple, le tag 0 précède une chaîne de caractères représentant une date et une heure au format standard. Il existe des tags pour les UUID, les données au format Base64, les fractions, les expressions régulières, l'absence de valeur, etc.
L'assignation des numéros fait l'objet d'un enregistrement de l'IANA.
Différentes bibliothèques implémentent le format CBOR. Il existe également des outils relatifs à ce format, notamment pour valider les données au format CBOR.