Formats and conversion

Convert between JSON, DUST, EDN and TRON with the library's parse and serialize operations, through the C ABI or any binding. Serialization writes a document as text, or as binary bytes for TRON. The example parses the people document and serializes it in the same format.

Example

Serialize the people document

people_text holds this document:

TRON449 B
Offset (hex)Bytes (hex)Meaning
00054 52 4F 4Emagic TRON
0043C 616765txt "age"
00802 24000000000000 00i64 36
0110F 0A 04000000 0800 0000map leaf, size 10: @4 → @8
01B4C 726F6C65txt "role"
0208C 656E67696E6565 72txt "engineer"
0290F 0A 1B000000 2000 0000map leaf, size 10: @1B → @20
0334C 6E616D65txt "name"
0383C 416461txt "Ada"
03C0F 0A 33000000 3800 0000map leaf, size 10: @33 → @38
04607 12 00910000 1100 0000 29000000 3C00 0000map branch, size 18, depth 0 (root), slots 8, 12, 15: @11 → @29 → @3C
0585C 236C696E6Btxt "#link"
05E5C 235F616461txt "#_ada"
0640F 0A 58000000 5E00 0000map leaf, size 10: @58 → @5E
06E3C 616765txt "age"
07202 29000000000000 00i64 41
07B0F 0A 6E000000 7200 0000map leaf, size 10: @6E → @72
0856C 6D656E746F72txt "mentor"
08C0F 0A 85000000 6400 0000map leaf, size 10: @85 → @64
0964C 726F6C65txt "role"
09B8C 656E67696E6565 72txt "engineer"
0A40F 0A 96000000 9B00 0000map leaf, size 10: @96 → @9B
0AE4C 6E616D65txt "name"
0B33C 426F62txt "Bob"
0B70F 0A AE000000 B300 0000map leaf, size 10: @AE → @B3
0C107 16 00990000 7B00 0000 8C000000 A400 0000 B7000000map branch, size 22, depth 0 (root), slots 8, 11, 12, 15: @7B → @8C → @A4 → @B7
0D73C 616765txt "age"
0DB02 1D000000000000 00i64 29
0E40F 0A D7000000 DB00 0000map leaf, size 10: @D7 → @DB
0EE4C 726F6C65txt "role"
0F38C 64657369676E65 72txt "designer"
0FC0F 0A EE000000 F300 0000map leaf, size 10: @EE → @F3
1064C 6E616D65txt "name"
10B2C 4379txt "Cy"
10E0F 0A 06010000 0B01 0000map leaf, size 10: @106 → @10B
11807 12 00910000 E400 0000 FC000000 0E01 0000map branch, size 18, depth 0 (root), slots 8, 12, 15: @E4 → @FC → @10E
12A6C 617574686F72txt "author"
1315C 736D6F6B65txt "smoke"
1370F 0A 2A010000 3101 0000map leaf, size 10: @12A → @131
1416C 726561736F6Etxt "reason"
1484C 73656564txt "seed"
14D0F 0A 41010000 4801 0000map leaf, size 10: @141 → @148
15707 0E 40080000 3701 0000 4D010000map branch, size 14, depth 0 (root), slots 6, 11: @137 → @14D
1654C 235F7478txt "#_tx"
16A0F 0A 65010000 5701 0000map leaf, size 10: @165 → @157
1744C 235F6379txt "#_cy"
1790F 0A 74010000 1801 0000map leaf, size 10: @174 → @118
1835C 235F626F62txt "#_bob"
1890F 0A 83010000 C100 0000map leaf, size 10: @183 → @C1
1935C 235F616461txt "#_ada"
1990F 0A 93010000 4600 0000map leaf, size 10: @193 → @46
1A307 16 88210000 6A01 0000 79010000 8901 0000 99010000map branch, size 22, depth 0 (root), slots 3, 7, 8, 13: @16A → @179 → @189 → @199
python159 B
async with (await stardust.parse(people_text, "tron")) as people:
    output = (await people.serialize("tron"))
result = (await stardust.parse(output, "tron"))
TRON449 B
Offset (hex)Bytes (hex)Meaning
00054 52 4F 4Emagic TRON
0046C 617574686F72txt "author"
00B5C 736D6F6B65txt "smoke"
0110F 0A 04000000 0B00 0000map leaf, size 10: @4 → @B
01B6C 726561736F6Etxt "reason"
0224C 73656564txt "seed"
0270F 0A 1B000000 2200 0000map leaf, size 10: @1B → @22
03107 0E 40080000 1100 0000 27000000map branch, size 14, depth 0 (root), slots 6, 11: @11 → @27
03F3C 616765txt "age"
04302 1D000000000000 00i64 29
04C0F 0A 3F000000 4300 0000map leaf, size 10: @3F → @43
0564C 726F6C65txt "role"
05B8C 64657369676E65 72txt "designer"
0640F 0A 56000000 5B00 0000map leaf, size 10: @56 → @5B
06E4C 6E616D65txt "name"
0732C 4379txt "Cy"
0760F 0A 6E000000 7300 0000map leaf, size 10: @6E → @73
08007 12 00910000 4C00 0000 64000000 7600 0000map branch, size 18, depth 0 (root), slots 8, 12, 15: @4C → @64 → @76
0925C 236C696E6Btxt "#link"
0985C 235F616461txt "#_ada"
09E0F 0A 92000000 9800 0000map leaf, size 10: @92 → @98
0A83C 616765txt "age"
0AC02 29000000000000 00i64 41
0B50F 0A A8000000 AC00 0000map leaf, size 10: @A8 → @AC
0BF6C 6D656E746F72txt "mentor"
0C60F 0A BF000000 9E00 0000map leaf, size 10: @BF → @9E
0D04C 726F6C65txt "role"
0D58C 656E67696E6565 72txt "engineer"
0DE0F 0A D0000000 D500 0000map leaf, size 10: @D0 → @D5
0E84C 6E616D65txt "name"
0ED3C 426F62txt "Bob"
0F10F 0A E8000000 ED00 0000map leaf, size 10: @E8 → @ED
0FB07 16 00990000 B500 0000 C6000000 DE00 0000 F1000000map branch, size 22, depth 0 (root), slots 8, 11, 12, 15: @B5 → @C6 → @DE → @F1
1113C 616765txt "age"
11502 24000000000000 00i64 36
11E0F 0A 11010000 1501 0000map leaf, size 10: @111 → @115
1284C 726F6C65txt "role"
12D8C 656E67696E6565 72txt "engineer"
1360F 0A 28010000 2D01 0000map leaf, size 10: @128 → @12D
1404C 6E616D65txt "name"
1453C 416461txt "Ada"
1490F 0A 40010000 4501 0000map leaf, size 10: @140 → @145
15307 12 00910000 1E01 0000 36010000 4901 0000map branch, size 18, depth 0 (root), slots 8, 12, 15: @11E → @136 → @149
1654C 235F7478txt "#_tx"
16A0F 0A 65010000 3100 0000map leaf, size 10: @165 → @31
1744C 235F6379txt "#_cy"
1790F 0A 74010000 8000 0000map leaf, size 10: @174 → @80
1835C 235F626F62txt "#_bob"
1890F 0A 83010000 FB00 0000map leaf, size 10: @183 → @FB
1935C 235F616461txt "#_ada"
1990F 0A 93010000 5301 0000map leaf, size 10: @193 → @153
1A307 16 88210000 6A01 0000 79010000 8901 0000 99010000map branch, size 22, depth 0 (root), slots 3, 7, 8, 13: @16A → @179 → @189 → @199

Choosing a format

FormatUse it to
DUSTWrite readable document examples and query expressions.
JSONExchange documents with JSON readers.
EDNExchange values with Clojure readers, under the EDN mapping rules.
TRONEncode a document as binary bytes.

Warning

A format can change number spelling, member order, or tagged values. Check the fidelity table before you depend on them.

EDN query variables

EDN symbols such as ?name parse as native strings. Serialization writes a native string such as "?name" as the EDN symbol ?name. The string must start with ?, contain a name, and form one valid EDN symbol token. Other string values remain quoted.

Query variables therefore keep their symbol form through EDN, JSON, DUST and TRON conversions. Clojure users can quote a query map to pass its symbols as data:

clojure204 B
(with-open [query (sd/from-value
                   '{:find [?name ?age]
                     :where [[?e :name ?name] [?e :age ?age]]
                     :orderBy [?name]})]
  (sd/serialize query :edn))

DUST layout

An object on one line, {op a args {t 1} e 1}, separates its members with whitespace. A top-level document, and any object that spans lines, holds exactly one member per line, and the rest of the line is the value of that member:

text34 B
{name Ada Lovelace
 role engineer}

This object is {"name":"Ada Lovelace","role":"engineer"}. In a multi-line object, {op a args 1 is the member op with the string a args 1. A line that cannot be one bare value, such as {op a args {t 1}, fails with Members_On_One_Line and the offset of its second key. Start each member on its own line, or keep the whole object on one line. Serialization never writes several members on one line of a multi-line object.

Operations

OperationReturnsSummary
Document.serializetextdocument.serialize(format, width) writes text, or binary bytes for TRON.
converttextconvert(text, from, to, width) calls parse and serialize, then releases the intermediate document.

Document.serialize

python63 B
def serialize(self, format: str, width: int = 0) -> str | bytes

Parameters

ParameterTypeOwnershipDefaultMeaning
selfDocumentBorrowed for the callRequiredThe document owner for this operation. Keep it alive during the call.
formatstrValueRequiredThe codec to use for this operation.
widthintValue0The requested formatter line width.

Errors

StatusWhen
"invalid_argument"the format is unknown or the width is negative
"closed"the document is closed
"out_of_memory"native memory is exhausted

Examples

document/serialize

expression_text holds this document:

TRON47 B
Offset (hex)Bytes (hex)Meaning
0054 52 4F 4Emagic TRON
041C 2Btxt "+"
062C 3F78txt "?x"
0902 01000000000000 00i64 1
120E 15 00 0700 030000 00 04000000 060000 00 09000000array leaf, size 21, shift 0, bitmap 0007, count 3 (root): @4 → @6 → @9
python123 B
async with (await stardust.parse(expression_text, "tron")) as expression:
    result = (await expression.serialize("tron"))
TRON76 B
Offset (hex)Bytes (hex)Meaning
0054 52 4F 4Emagic TRON
044C 74657874txt "text"
0914 2F 54524F4E1C2B 2C3F780201000000 000000000E150007 0003000000040000 0006000000090000 0012000000000000 00txt "TRON\u001C+,?x\u0002\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u000E\u0015\u0000\u0007\u0000\u0003…"
3A0F 0A 04000000 0900 0000map leaf, size 10: @4 → @9

document/serialize

number_text holds this document:

TRON21 B
Offset (hex)Bytes (hex)Meaning
0054 52 4F 4Emagic TRON
0402 01000000000000 00i64 1
python111 B
async with (await stardust.parse(number_text, "tron")) as number:
    result = (await number.serialize("tron"))
TRON50 B
Offset (hex)Bytes (hex)Meaning
0054 52 4F 4Emagic TRON
044C 74657874txt "text"
0914 15 54524F4E0201 0000000000000004 00000000000000txt "TRON\u0002\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u0004\u0000\u0000\u0000\u0000\u0000\u0000\u0000"
200F 0A 04000000 0900 0000map leaf, size 10: @4 → @9

document/serialize

name_text holds this document:

TRON16 B
Offset (hex)Bytes (hex)Meaning
054 52 4F 4Emagic TRON
43C 416461txt "Ada"
python105 B
async with (await stardust.parse(name_text, "tron")) as name:
    result = (await name.serialize("tron"))
TRON45 B
Offset (hex)Bytes (hex)Meaning
0054 52 4F 4Emagic TRON
044C 74657874txt "text"
0914 10 54524F4E3C41 6461040000000000 0000txt "TRON<Ada\u0004\u0000\u0000\u0000\u0000\u0000\u0000\u0000"
1B0F 0A 04000000 0900 0000map leaf, size 10: @4 → @9

document/serialize

expression_text holds this document:

TRON47 B
Offset (hex)Bytes (hex)Meaning
0054 52 4F 4Emagic TRON
041C 2Btxt "+"
062C 3F78txt "?x"
0902 01000000000000 00i64 1
120E 15 00 0700 030000 00 04000000 060000 00 09000000array leaf, size 21, shift 0, bitmap 0007, count 3 (root): @4 → @6 → @9
python123 B
async with (await stardust.parse(expression_text, "tron")) as expression:
    result = (await expression.serialize("tron"))
TRON76 B
Offset (hex)Bytes (hex)Meaning
0054 52 4F 4Emagic TRON
044C 74657874txt "text"
0914 2F 54524F4E1C2B 2C3F780201000000 000000000E150007 0003000000040000 0006000000090000 0012000000000000 00txt "TRON\u001C+,?x\u0002\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u000E\u0015\u0000\u0007\u0000\u0003…"
3A0F 0A 04000000 0900 0000map leaf, size 10: @4 → @9

document/serialize

expression_text holds this document:

TRON47 B
Offset (hex)Bytes (hex)Meaning
0054 52 4F 4Emagic TRON
041C 2Btxt "+"
062C 3F78txt "?x"
0902 01000000000000 00i64 1
120E 15 00 0700 030000 00 04000000 060000 00 09000000array leaf, size 21, shift 0, bitmap 0007, count 3 (root): @4 → @6 → @9
python123 B
async with (await stardust.parse(expression_text, "tron")) as expression:
    result = (await expression.serialize("tron"))
TRON76 B
Offset (hex)Bytes (hex)Meaning
0054 52 4F 4Emagic TRON
044C 74657874txt "text"
0914 2F 54524F4E1C2B 2C3F780201000000 000000000E150007 0003000000040000 0006000000090000 0012000000000000 00txt "TRON\u001C+,?x\u0002\u0001\u0000\u0000\u0000\u0000\u0000\u0000\u0000\u000E\u0015\u0000\u0007\u0000\u0003…"
3A0F 0A 04000000 0900 0000map leaf, size 10: @4 → @9

C exports: stardust_serialize, stardust_text_data, stardust_text_error, stardust_text_release

convert

python132 B
def convert(
    text: str | bytes, from_format: str, to_format: str, width: int = 0, *, library: str | None = None
) -> str | bytes

Parameters

ParameterTypeOwnershipDefaultMeaning
textstr | bytesValueRequiredEncoded input bytes in the selected format. TRON is binary.
from_formatstrValueRequiredThe input codec.
to_formatstrValueRequiredThe output codec.
widthintValue0The requested formatter line width.
librarystr | NoneValueNoneLoaded native library used by this call.

Errors

StatusWhen
"invalid_json"JSON text is malformed
"invalid_argument"the text is malformed, a format is unknown or the width is negative
"out_of_memory"native memory is exhausted

Examples

convert

expression_text holds these bytes:

text278 B
// One expression built once and evaluated against several inputs. The
// evaluate examples load this file, build `expression`, evaluate it with each
// of `inputs` in order and compare each result with `expected`.
expression [+ ?x 1]
inputs     [{x 1} {x 41}]
expected   [2 42]
python66 B
result = (await stardust.convert(expression_text, "dust", "tron"))
TRON497 B
Offset (hex)Bytes (hex)Meaning
00054 52 4F 4Emagic TRON
0045C 6279746573txt "bytes"
00A25 D201 54524F4E1C 2B2C3F7802010000 00000000000E1500 0700030000000400 0000060000000900 00001C7802010000 00000000000F0A27 000000290000001C 7802290000000000 00000F0A3C000000 3E0000000E110003 0002000000320000 0047000000020200 000000000000022A 000000000000000E 1100030002000000 620000006B000000 8C24636F6D6D656E 7414CD4F6E652065 787072657373696F 6E206275696C7420 6F6E636520616E64 206576616C756174 656420616761696E 7374207365766572 616C20696E707574 732E205468650A65 76616C7561746520 6578616D706C6573 206C6F6164207468 69732066696C652C 206275696C642060 6578707265737369 6F6E602C20657661 6C75617465206974 2077697468206561 63680A6F66206069 6E70757473602069 6E206F7264657220 616E6420636F6D70 6172652065616368 20726573756C7420 7769746820606578 706563746564602E 0F0A850000008E00 00006C696E707574 730F0A6701000051 0000008C65787065 637465640F0A7801 000074000000070E 020100006E010000 81010000070A0100 00008B010000AC65 787072657373696F 6E0F0AA301000012 0000000712400900 005D010000990100 00AE010000B80100 0000000000bin, length 466
1DF0F 0A 04000000 0A00 0000map leaf, size 10: @4 → @A

convert

edn_text holds this document:

TRON24 B
Offset (hex)Bytes (hex)Meaning
0054 52 4F 4Emagic TRON
04BC 7B3A612031203A 6120327Dtxt "{:a 1 :a 2}"
python228 B
async with (await stardust.parse(edn_text, "tron")) as edn:
    output = (await edn.read((await edn.root()))).text
try:
    (await stardust.parse(output, "edn")).close()
except stardust.StardustError as error:
    result = error
TRON254 B
Offset (hex)Bytes (hex)Meaning
0054 52 4F 4Emagic TRON
046C 737461747573txt "status"
0B14 10 696E76616C69 645F617267756D65 6E74txt "invalid_argument"
1D0F 0A 04000000 0B00 0000map leaf, size 10: @4 → @B
276C 656E74697479txt "entity"
2E00nil
2F0F 0A 27000000 2E00 0000map leaf, size 10: @27 → @2E
397C 6D657373616765txt "message"
4114 27 696E76616C69 642045444E202844 75706C6963617465 5F4B657929206174 206F666673657420 36txt "invalid EDN (Duplicate_K…"
6A0F 0A 39000000 4100 0000map leaf, size 10: @39 → @41
7407 0E 08020000 2F00 0000 6A000000map branch, size 14, depth 1, slots 3, 9: @2F → @6A
824C 70617468txt "path"
8700nil
880F 0A 82000000 8700 0000map leaf, size 10: @82 → @87
925C 6669656C64txt "field"
9800nil
990F 0A 92000000 9800 0000map leaf, size 10: @92 → @98
A34C 636F6465txt "code"
A8BC 696E76616C6964 5F65646Etxt "invalid_edn"
B40F 0A A3000000 A800 0000map leaf, size 10: @A3 → @A8
BE6C 6F6666736574txt "offset"
C502 06000000000000 00i64 6
CE0F 0A BE000000 C500 0000map leaf, size 10: @BE → @C5
D807 1E 51620000 1D00 0000 74000000 8800 0000 99000000 B400 0000 CE000000map branch, size 30, depth 0 (root), slots 0, 4, 6, 9, 13, 14: @1D → @74 → @88 → @99 → @B4 → @CE

convert

instant_text holds this document:

TRON49 B
Offset (hex)Bytes (hex)Meaning
0054 52 4F 4Emagic TRON
044C 23757463txt "#utc"
0914 14 323032362D31 302D30375431323A 33343A35365Atxt "2026-10-07T12:34:56Z"
1F0F 0A 04000000 0900 0000map leaf, size 10: @4 → @9
python113 B
async with (await stardust.parse(instant_text, "tron")) as instant:
    result = (await instant.serialize("edn"))
TRON57 B
Offset (hex)Bytes (hex)Meaning
0054 52 4F 4Emagic TRON
044C 74657874txt "text"
0914 1C 23696E737420 22323032362D3130 2D30375431323A33 343A35365A22txt "#inst \"2026-10-07T12:34:…"
270F 0A 04000000 0900 0000map leaf, size 10: @4 → @9

convert

container_text holds this document:

TRON34 B
Offset (hex)Bytes (hex)Meaning
0054 52 4F 4Emagic TRON
0402 01000000000000 00i64 1
0D0E 0D 00 0100 010000 00 04000000array leaf, size 13, shift 0, bitmap 0001, count 1 (root): @4
python168 B
async with (await stardust.parse(container_text, "tron")) as container:
    output = (await container.serialize("tron"))
result = (await stardust.parse(output, "tron"))
TRON34 B
Offset (hex)Bytes (hex)Meaning
0054 52 4F 4Emagic TRON
0402 01000000000000 00i64 1
0D0E 0D 00 0100 010000 00 04000000array leaf, size 13, shift 0, bitmap 0001, count 1 (root): @4

convert

order_text holds this document:

TRON68 B
Offset (hex)Bytes (hex)Meaning
0054 52 4F 4Emagic TRON
041C 61txt "a"
0602 01000000000000 00i64 1
0F0F 0A 04000000 0600 0000map leaf, size 10: @4 → @6
191C 7Atxt "z"
1B02 02000000000000 00i64 2
240F 0A 19000000 1B00 0000map leaf, size 10: @19 → @1B
2E07 0E 40400000 0F00 0000 24000000map branch, size 14, depth 0 (root), slots 6, 14: @F → @24
python156 B
async with (await stardust.parse(order_text, "tron")) as order:
    output = (await order.serialize("tron"))
result = (await stardust.parse(output, "tron"))
TRON68 B
Offset (hex)Bytes (hex)Meaning
0054 52 4F 4Emagic TRON
041C 61txt "a"
0602 01000000000000 00i64 1
0F0F 0A 04000000 0600 0000map leaf, size 10: @4 → @6
191C 7Atxt "z"
1B02 02000000000000 00i64 2
240F 0A 19000000 1B00 0000map leaf, size 10: @19 → @1B
2E07 0E 40400000 0F00 0000 24000000map branch, size 14, depth 0 (root), slots 6, 14: @F → @24

C exports: stardust_parse, stardust_serialize, stardust_text_data, stardust_text_error, stardust_text_release

Fidelity

Each cell shows the result after parsing and serialization in that format. The notes below the table explain each result.

ValueJSONDUSTEDNTRON
null_booleanRound tripRound tripRound tripRound trip
integerRound tripChangedChangedChanged
floatRound tripRound tripRound tripChanged
non_finiteRefusedChangedRefusedRefused
decimal_ratioRound tripRound tripChangedChanged
stringRound tripRound tripChangedRound trip
member_orderRound tripRound tripRound tripChanged
duplicate_keysRound tripRound tripRefusedChanged
empty_objectRound tripRound tripRound tripRound trip
utcRound tripRound tripChangedRound trip
linkRound tripRound tripRound tripRound trip
binaryRound tripRound tripRound tripChanged
edn_formsNot applicableNot applicableChangedNot applicable

Fidelity notes

  • null_boolean
    • JSON: Round trip. Null and booleans keep their values.
    • DUST: Round trip. Null and booleans keep their values.
    • EDN: Round trip. EDN nil maps to null.
    • TRON: Round trip. Binary tags preserve null and booleans.
  • integer
    • JSON: Round trip. The codec preserves integer spelling.
    • DUST: Changed. Leading-zero tokens are strings.
    • EDN: Changed. Integer spelling is canonical.
    • TRON: Changed. Integers keep their value and use canonical spelling.
  • float
    • JSON: Round trip. The codec preserves float spelling.
    • DUST: Round trip. The codec preserves float spelling.
    • EDN: Round trip. The codec preserves this float spelling.
    • TRON: Changed. Integral floats in containers become integers.
  • non_finite
    • JSON: Refused. JSON has no non-finite numbers.
    • DUST: Changed. NaN is a string.
    • EDN: Refused. The parser rejects non-finite numeric values.
    • TRON: Refused. The parser rejects non-finite binary values.
  • decimal_ratio
    • JSON: Round trip. The codec preserves finite decimal spelling.
    • DUST: Round trip. The codec preserves finite decimal spelling.
    • EDN: Changed. Ratios reduce to native numbers.
    • TRON: Changed. Decimals use f64 precision.
  • string
    • JSON: Round trip. Strings require UTF-8.
    • DUST: Round trip. Number-like strings require quotes.
    • EDN: Changed. A lone surrogate becomes a question mark.
    • TRON: Round trip. Decoded strings require UTF-8.
  • member_order
    • JSON: Round trip. The codec preserves object order.
    • DUST: Round trip. The codec preserves object order.
    • EDN: Round trip. The codec preserves map order.
    • TRON: Changed. Members use trie order.
  • duplicate_keys
    • JSON: Round trip. The codec preserves all duplicate members.
    • DUST: Round trip. The codec preserves all duplicate members.
    • EDN: Refused. The parser rejects equal map keys.
    • TRON: Changed. The codec keeps the last duplicate value.
  • empty_object
    • JSON: Round trip. The empty object is braces.
    • DUST: Round trip. The empty root object serializes to zero bytes.
    • EDN: Round trip. The empty map is braces.
    • TRON: Round trip. The empty object has a binary footer.
  • utc
    • JSON: Round trip. UTC remains a tagged object.
    • DUST: Round trip. UTC uses a tagged object.
    • EDN: Changed. Millisecond instants use the EDN inst tag.
    • TRON: Round trip. UTC remains a plain map.
  • link
    • JSON: Round trip. Links remain tagged objects.
    • DUST: Round trip. Links remain tagged objects.
    • EDN: Round trip. Links remain maps.
    • TRON: Round trip. Links remain maps.
  • binary
    • JSON: Round trip. Base64 remains a tagged object.
    • DUST: Round trip. Base64 remains a tagged object.
    • EDN: Round trip. Base64 remains a map.
    • TRON: Changed. Valid padded base64 in a sole member becomes a binary node.
  • edn_forms
    • JSON: Not applicable. EDN forms have no JSON syntax.
    • DUST: Not applicable. EDN forms have no DUST syntax.
    • EDN: Changed. The parser converts keywords, symbols, characters, sets and lists to native values. It omits metadata and discarded forms. It reads only the first form.
    • TRON: Not applicable. EDN forms have no TRON syntax.

The host mapping on the Language values and documents page shows how language values become documents without a text format.