Ion (serialization format)

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.

Ion
Filename extension
.ion
Developed byAmazon
Type of formatData interchange
Websiteamzn.github.io/ion-docs/

Data types

As a superset of JSON, Ion includes the following data types

  • null: An empty value
  • bool: Boolean values
  • string: Unicode text literals
  • list: Ordered heterogeneous collection of Ion values
  • struct: Unordered collection of key/value pairs

The nebulous JSON 'number' type is strictly defined in Ion to be one of

  • int: Signed integers of arbitrary size
  • float: 64-bit IEEE binary-encoded floating point numbers
  • decimal: Decimal-encoded real numbers of arbitrary precision

Ion adds these types:

  • timestamp: Date/time/time zone moments of arbitrary precision
  • symbol: Unicode symbolic atoms (aka identifiers)
  • blob: Binary data of user-defined encoding
  • clob: Text data of user-defined encoding
  • sexp: Ordered collections of values 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 annotations to any value in the form of symbols. Such annotations may be used as metadata for otherwise opaque data (such as a blob).

Implementations

Examples

Sample document

// comments are allowed in Ion files 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 value': -31415e-4,  // key is a value that contains spaces 
  "An int value": null.int,
  annotated: age::45,     // age here is the annotation to number 45
  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 (is a [valid] "Ion") last::value 42) // Ion S-expressions, 
  blob_value: {{OiBTIKUgTyAASb8=}},
  clob_value: {{"a b"}}
}

Uses

  • Amazon's Quantum Ledger Database (QLDB) stores data in Ion documents. [1]
  • PartiQL, an open source SQL-based query language also by Amazon, is build upon Ion. PartiQL supported queries are used by QLDB, S3Select. [2]

Tooling and Extensions

gollark: Well, my school's computers all have the BIOS password set to just... nothing.
gollark: Isn't that more in embedded devices?
gollark: Other OSes can just ignore the permissions, is the thing.
gollark: The designers obviously did not want unprivileged users to be able to arbitrarily make themselves have permissions.
gollark: I doubt it's possible from within MacOS for obvious security reasons, but if you can boot into a Linux USB stick or something you can edit it from there.

References


This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.