This article has multiple issues. Please help improve it or discuss these issues on the talk page. (Learn how and when to remove these messages)
(Learn how and when to remove this message)
|
| Ion | |
|---|---|
| Filename extension |
.ion |
| Internet media type | application/ion |
| Developed by | Amazon |
| Type of format | Data interchange |
| Website | amzn.github.io/ion-docs/ |
Ion is a data serialization language developed by Amazon. It may be represented by either a human-readable text form or a compact binary form. The text form is a superset of JSON; thus, any valid JSON document is also a valid Ion document.
Data types
[edit]As a superset of JSON, Ion includes the following data types
null: An empty value (for JSON compatibility)bool: Boolean valuesstring: Unicode text literalslist: Ordered heterogeneous collection of Ion values (extension of JSON array)struct: Unordered collection of key/value pairs (extension of JSON object)
The nebulous JSON 'number' type is strictly defined in Ion to be one of
int: Signed integers of arbitrary sizefloat: 64-bit IEEE binary-encoded floating point numbersdecimal: Decimal-encoded real numbers of arbitrary precision
Ion adds these types:
timestamp: Date/time/time zone moments of arbitrary precisionsymbol: Unicode symbolic atoms (aka identifiers), stored as interned strings in binary formatblob: Binary data of user-defined encodingclob: Text data of user-defined encodingsexp: Nested list of values (equivalent to an S-expression) with application-defined semantics
Each Ion type supports a null variant, indicating a lack of value while maintaining a strict type (e.g., null.int, null.struct).
The Ion format permits attaching one or more annotations (i.e. a list of symbols) to any value. Such annotations may be used as metadata for otherwise opaque data (such as a blob).
Implementations
[edit]Examples
[edit]Sample document
[edit]Features seen in JavaScript and JSON5:
// Comments are allowed using the double forward slash { key:"value",// key here is a symbol, it can also be a string as in JSON nums:1_000_000,// equivalent to 1000000, use of underscores with numbers is more readable "A float":31415e-4,// key is a value that contains spaces }
Features unique to Ion:
{ symbol:'a symbol',// symbols are interned Unicode strings "A null integer":null.int, annotated:age::35,// the symbol "age" is attached to the value "35" as an annotation lists:'hw grades'::[80,85,90],// any symbol can be used as an annotation many_annot:I::have::many::annotations::true,// annotations are not nested, but rather, a list of annotations sexp:(this(isa[valid]"Ion")last::value+42)// Ion S-expressions. 'this', 'is', 'a', 'valid', 'value', and '+' are symbols. _value:{{OiBTIKUgTyAASb8=}},// blob value is represented as base64 _value:{{"a b\0\xff"}}// clob value is represented as an ASCII string with C-style escapes // ^ repeated names (keys) are allowed but generate a warning for undefined behavior }
Uses
[edit]- Amazon's Quantum Ledger Database (QLDB) stores data in Ion documents.[1]
- PartiQL, an open source SQL-based query language also by Amazon, is built upon Ion. PartiQL supported queries are used by QLDB, S3Select.[2]
Tooling and extensions
[edit]- Ion Path Extractor API aims to combine the convenience of a DOM API with the speed of a streaming API.
- IDE support
- Jackson data format module for Ion
- Apache Hive SerDe for Ion
- Ion Schema
- Ion Hash defines an algorithm for constructing a hash for any Ion value, given a user-provided hash function capable of taking binary data of arbitrary length.
