Collection
Collections in Internet Object
A Collection in Internet Object is an ordered sequence of collection items (objects) within a section of a document. Collections enable efficient serialization, batching, and streaming of multiple objects—such as datasets, tables, or event logs—in a concise, flexible format.
Collections are conceptually similar to datasets in CSV, streams in JSON Lines, or record arrays in Avro.
Collections are always part of an Internet Object document, not standalone documents. An Internet Object document consists of a header and a body. The body contains one or more sections. A section can contain either a single object or a collection (multiple objects as collection items).
Collections support both homogeneous and heterogeneous data. Each item in the collection is independent; failure of one item does not affect others.
Syntax
A collection section consists of one or more collection items, each beginning with a tilde ~
(U+007E
) followed by an object.
collection = collectionItem *(collectionItem)
collectionItem = "~" object
object
is as defined in the Objects specification. Both open and closed object forms are permitted, though open form is recommended for clarity.
Structural Characters
~
Tilde
U+007E
Begins a new collection item
,
Comma
U+002C
Separates values within an object
{}
Curly Braces
U+007B
, U+007D
For closed object syntax (optional)
Definition of Collection Item
A collection item is the top-level object immediately following a tilde (~
) in a collection section.
Each collection item must be a valid Internet Object object—either in open form (comma-separated values) or closed form (enclosed in
{}
).If the item is empty (
~
alone), it is called an empty item and is interpreted as an empty object ({}
).
Type Promotion of Collection Items
If a collection item appears syntactically to be a single primitive value (number, string, boolean, null) or an array, it is implicitly promoted to an open object containing that value as its only field.
Examples:
~ 1 # Interpreted as: { 1 }
~ true # Interpreted as: { true }
~ [a, b, c, d] # Interpreted as: { [a, b, c, d] }
~ John Doe # Interpreted as: { John Doe }
~ {1, 2} # Remains: { 1, 2 }
~ # Empty item, parsed as: {}
~ name: John Doe # Interpreted as: { name: John Doe }
Rule: Every collection item is parsed as an object, regardless of whether it appears to be a primitive, array, or explicit object.
Valid Forms
Collection of Open Objects (Recommended)
~ 101, Thomas, 25, HR, {Bond Street, New York, NY}
~ # Empty item; parsed as {}
~ 102, George, 30, Sales, {Duke Street, New York, NY}
Collection of Closed Objects
~ {Jane Doe, 20, f, N/A, [0xFF0000, 0x0000FF], F}
Collection with JSON like object syntax
~ {"name": " John Doe", "address": {"street": "Main St", "city": "Seattle"}, "favorite_colors": ["purple"], "is_active": true}
~ {"name": "Eve", "age": 33, "gender": "female", "location": {"city": "Dallas", "state": "TX"}, "favorite_colors": ["orange"], "is_active": false}
Mixed
~ Dave, 40, m, {Main St, Seattle, WA}, [purple], T
~ {Eve, 33, f, {Elm St, Dallas, TX}, [orange], F}
Optional Behaviors
Whitespace and Formatting
Whitespace is allowed around the tilde, commas, and within objects.
Collection items are typically separated by newlines, but any whitespace may be used.
Trailing commas within objects are allowed and ignored.
Empty Items
An empty item (just
~
) is always interpreted as an empty object ({}
).If a schema is present, an empty item is valid only if all fields are optional or nullable; otherwise, it is invalid.
Nesting or Composition
Each collection item must be a top-level object (open or closed).
Objects may contain nested arrays or child objects as fields.
Invalid Forms
# ✗ Missing tilde
101, Thomas, 25, HR, ...
# ✗ Missing commas between values, all values are considered as a single value
~ 101 Thomas 25 HR ...
# ✗ Missing comma between values
~ 101, 25 HR, ...
# ✗ Trailing data outside object
~ {101, 25, HR} extra
Collection Item Independence and Error Handling
Each collection item (object) is parsed and validated independently:
If a collection item fails to parse or validate, only that item is marked as an error.
All other items remain unaffected and are processed as usual.
Implementations may provide modes for "fail fast" (stop on first error) or "parse all" (continue and collect errors); it is recommended to parse all items and report errors per item.
If a collection item contains nested child objects, failure means the entire top-level object (the collection item) is in error, not just the child.
Example:
~ John, 28, m, {Main St, LA}, [red], T # valid
~ Jane, N/A, f, {Second St, LA}, [blue], F # valid
~ Alice, OOPS, f, {Third St, NY, [green], T # Error: ❌ unclosed object, invalid
~ Bob, 35, m, {Fourth St, NY}, [yellow], T # valid
The third item is invalid, but the others are unaffected.
Preservation of Structure
Collection item order and structure are preserved as written.
Whitespace and comments are preserved (but ignored for parsing).
Interpretation, key uniqueness, and field mapping are determined by schemas, validators, or application logic.
See Also
Last updated
Was this helpful?