# Cedilla Object Notation 1. JSON compressed as CDON, written directly to disk (a direct 50% reduction). 2. CDON further compressed with LZ4 (a clean 90% reduction). 3. The raw JSON file as fetched from a random data source. 4. CDON decompressed once again to JSON. Note that this file is a little larger than the original JSON file as it contains a lot more decimal places due to float precision (this shouldn't affect the size in memory). ![an image of file sizes](https://i.imgur.com/AHJiFpq.png) FS stands for "Fast String". ```cpp primary CedillaObjectNotation { utf8"CDON" magic; Header header; primary Body body; } Header { uint16 version; // always 1 FSFormat fsFormat; StringTable stringTable; } FSFormat enum { Format8, Format16, Format32, } FSPrimitive match(fsFormat) { Format8: uint8; Format16: uint16; Format32: uint32; } StringTable { FSPrimitive count; String[count] strings; } Body { primary Value object; } ValueType enum { Null, Boolean, Uint8, Uint16, Uint32, Uint64, Int8, Int16, Int32, Int64, Float32, Float64, String, FS, Array, Object, } String { uint32 length; primary utf8 value; } StringValue Value & { (ValueType.String | ValueType.FS) type } Value { ValueType type; match { Boolean: { uint8 value; } Uint8: { uint8 value; } Uint16: { uint16 value; } Uint32: { uint32 value; } Uint64: { uint64 value; } Int8: { int8 value; } Int16: { int16 value; } Int32: { int32 value; } Int64: { int64 value; } Float32: { float32 value; } Float64: { float64 value; } String: { String value; } FS: { FSPrimitive index; } Array: { uint32 count; Value[count] values; } Object: { uint32 count; StringValue[count] keys; Value[count] values; } } } ```