This is a small and clean library for associative arrays with Boolean / Integer / Float / WideString values. Allows import (export) from (to) JSON text. Extensive error-checking.
Some open-source projects I would like to give credit:
- FunHash by Sokolov Yura
- HatTrie by Daniel C. Jones
- FastInt64 - unknown source
- FastMove by FastCode project
The library was built for the ease of use and clean understandable code - performance was not a first priority so I have not made any benchmarking.
- Numeric and WideString indexes (similar to PHP arrays)
- Boolean / Int64 / Double / WideString item values
- Strict parsing of JSON with descriptive Exception on error
- Simple interface (Add, Delete, Remove, Clear)
- Simple iterators (First, Last, Prev, Next)
| Name | Description |
|---|---|
| jsNull | The NULL value |
| jsBool | Node value is Boolean |
| jsInt | Node value is Integer |
| jsFloat | Node value is Floating-point |
| jsString | Node value is String |
| jsArray | Node is an array - has children |
- TJSONEnum = procedure (Nomer: Integer; Elem: TJSONbase; Data: Pointer; Var Stop: Boolean);
- TJSONEnumObj = procedure (Nomer: Integer; Elem: TJSONbase; Data: Pointer; Var Stop: Boolean) Of Object;
| Name | Type | Description |
|---|---|---|
| Assoc | Boolean | Whether all keys are Numeric or at least one key is String |
| Parent | TJSONbase | Where the given node belongs to |
| FirstChild | TJSONbase | Childs are organized as a double-linked list |
| LastChild | TJSONbase | Childs are organized as a double-linked list |
| Next | TJSONbase | Next sibling (by the order of creation) |
| Prev | TJSONbase | Previous sibling (by the order of creation) |
| SelfType | TJSONtype | Type of data in the current node |
| Value | Variant | Value of the current node |
| Count | Integer | Number of children if the node is non-scalar |
| Name | WideString | The String key of the current node if this is an associative array |
| ID | Integer | The Numeric key of the current node if this is non-associative array |
| Child[Index: Integer] | TJSONbase | Used to access the children of non-associative arrays |
| Field[Key: WideString] | TJSONbase | Used to access the children of associatve arrays |
| JsonText | AnsiString | Stringification of the current node as JSON text |
| Name | Parameters | Returns | Description |
|---|---|---|---|
| Clear | Remove all children | ||
| Delete | Idx: Integer | Delete a child from non-associative array and free the object | |
| Delete | Key: WideString | Delete a child from associative array and free the object | |
| Remove | Idx: Integer | TJSONbase | Removee a child from non-associative array and return the object |
| Remove | Key: WideString | TJSONbase | Remove a child from associative array and return the object |
| ForEach | Iterator: TJSONEnum UserData: Pointer |
Iterates over the children of non-associative array | |
| ForEach | Iterator: TJSONEnumObj UserData: Pointer |
Iterates over the children of associative array | |
| Add | B: Boolean | TJSONbase | Appends a new Boolean child to the node (making it an array if not already, returns the new child) |
| Add | I: Int64 | TJSONbase | Appends a new Integer child to the node (making it an array if not already, returns the new child) |
| Add | D: Double | TJSONbase | Appends a new Floating-point child to the node (making it an array if not already, returns the new child) |
| Add | S: WideString | TJSONbase | Appends a new String child to the node (making it an array if not already, returns the new child) |
| Add | A: TJSONbase | Appends an existing array as a child to the node (making it an array if not already | |
| Add | Key: WideString B: Boolean |
TJSONbase | Appends a new Boolean child to the node (making it an array if not already, returns the new child) |
| Add | Key: WideString I: Int64 |
TJSONbase | Appends a new Integer child to the node (making it an array if not already, returns the new child) |
| Add | Key: WideString D: Double |
TJSONbase | Appends a new Floating-point child to the node (making it an array if not already, returns the new child) |
| Add | Key: WideString S: WideString |
TJSONbase | Appends a new String child to the node (making it an array if not already, returns the new child) |
| Add | Key: WideString A: TJSONbase |
Appends an existing array as a child to the node (making it an array if not already |
- Unsupported assignment of object
- Automatic indexing overflow
- Invalid data type assigned to TJSONbase
- This is an array - it does not have a value by itself
- Index is outside the array
- TJSONbase is not an array and does not support indexes
- Associative arrays do not support empty index
- TJSONbase is not an array and does not have Count property
- Unsupported data type in TJSONbase.JsonText
- Unexpected character at position
- Empty element at position
- Missing closing bracket for array
- Missing closing bracket for object
- Unterminated string at position
- Missing property name/value delimiter (:) at position
- Missing property value at position
- Missing fractional part of a floating-point number at position
- Exponent of the number is not integer at position
- Unquoted property name at position
- Control character encountered at position
- Unrecognized escape sequence at position
- Invalid UNICODE escape sequence at position
- Unescaped symbol at position
- Empty property name at position
- Expected closing bracket or comma at position