CBOR
RFC 8949 Concise Binary Object Representation (CBOR) STD 94
JSON的なものをバイナリ形式にしたもの 短いのが特徴。 IoT向けにParseがしやすいJSON的な使い方をされる
table:データ
major型.追加情報 内容 形式
0 64bit 正整数
1 64bit 負整数
2 バイト列
3 文字列 UTF-8
4 Array / List
5 Map
6 タグ拡張 ネスト可能
6.0 datetime string 3 RFC 4287 Atom Section 3.3 RFC 3339
6.1 Epoc time 0 1 7.25 7.26 7.27 いずれかの型
6.2 Bignum 正整数 2
6.3 Bignum 負整数 2
6.4 BigDecimal 2
6.5 BigFloat 2
6.6...20 (未定義)
6.21 base64url の代用 2
6.22 base64 の代用 2
6.23 base16 (HEX)の代用 2
6.24 CBOR encoded 2
6.25...31 (未定義)
6.32 URI 3
6.33 base64url 3
6.34 base64 3
6.35 正規表現 3
6.36 MIME message 3
6.110 ObjectIdentifier RFC 9090
6.111 ObjectIdentifier RFC 9090
6.112 ObjectIdentifier RFC 9090
7 長さ固定なもの
7.20 false
7.21 true
7.22 NULL
7.23 undefined
7.25 Half 16bit 浮動小数点
7.26 Single 32bit 浮動小数点
7.27 Double 64bit 浮動小数点
7.28...30 予約
7.31 break
符号化方式がcodeによってある程度決まるので未定義な部分もある
扱えるデータ
NULL
undefined (JavaScript等)
Boolean
数値
整数型 64bit 符号なし * 2 = 65bit相当?
浮動小数点型 (16bit , Float(32bit), Double(64bit))
バイナリ列
テキスト (UTF-8)
Array / List
Map
タグで型の意味づけなどを拡張できる
日付/時刻 text または 秒数
Bignum 整数
BigDecimal
BigFloat
BASE64URL
BASE64
BASE16 (HEX)
CBOR のデータ
など
JSON のものはまるっと扱えるような形だが一部違いがある
undefined がある
浮動小数点型のNaN, Infinityなどが使える?
整数、浮動小数点共にタグなしでは上限あり。BigInteger, BigDecimal などはタグで扱う
バイナリデータが扱える JSONはBASE64などを使う
タグで型が拡張できる
RFC 8742 CBOR Sequences 複数CBORを1ストリームにまとめる
RFC 8746 Tags for typed arrays
RFC 8769 Cryptographic Message Syntax (CMS) Content Types for Concise Binary Object Representation (CBOR)
RFC 8943 Tags for dates
RFC 9090 Concise Binary Object Representation (CBOR) Tags for Object Identifiers
テキスト表現にはYAMLがいいらしいのでJSONからはYAML経由でなんとかする方がいい? スキーマ定義にRFC 8610 Concise data definition language(CDDL)があるらしい。