Skip to main content

Introducing CSON serialization & data representation format

CSON (Concise Object Notation) is a data serialization format that is designed to be more concise than JSON (JavaScript Object Notation). CSON is a variation of JSON, which means that it shares some similarities with JSON but also has its own unique features and syntax.

One of the main differences between CSON and JSON is that CSON allows for the use of multiple separator characters between key-value pairs in an object or elements in an array. In JSON, only a comma can be used as a separator. In CSON, however, a semicolon, comma, pipe, tilde or forward slash can be used as a separator. However, it’s important to note that once a separator character has been chosen, it must be used consistently throughout the data.

Here’s a simple grammar that can be used for valide CSON serialization format: 

cson = object | array

object = '{' pair (separator pair)* '}'
pair = key ':' value
key = string
value = string | number | object | array

array = '[' element (separator element)* ']'
element = value

string = [a-zA-Z0-9_]+
number = [0-9]+

separator = ',' | ';' | '|' | '~' | '/'

This grammar defines the basic structure of a CSON object or array. It specifies that an object is a collection of key-value pairs enclosed in curly brackets, and an array is a collection of elements enclosed in square brackets. The key in a key-value pair must be a string, and the value can be a string, number, object or array. The elements in an array can also be any of these types.

Here’s the simple grammar that allows semicolon, comma, pipe, tilde or forward slash as separators:

In this grammar, the separator rule has been added to allow any of the specified characters to be used as separators between pairs in an object or elements in an array.

Here’s an example of a simple object in JSON format:

{
  "name": "John Smith",
  "age": 30,
  "address": {
    "street": "123 Main St",
    "city": "Springfield",
    "state": "IL"
  }
}

The same object can be represented in CSON format using a different separator character:

name:John Smith;age:30;address:{street:123 Main St;city:Springfield;state:IL}

In this example, semicolons are used as separators between the key-value pairs in both the top-level object and the nested address object.

Another difference between CSON and JSON is that CSON allows for the omission of double quotes around keys and string values. This can make the data more concise. In the example above, the keys and string values are not enclosed in double quotes.

CSON’s focus is mainly on making the data as compact and concise as possible. This makes it fast to deliver and easy to convert into other data formats. As such, CSON does not support newlines or indentation for formatting.

In CSON, certain characters are reserved and must be escaped with a backslash if they appear within double quotes to prevent them from being interpreted as CSON syntax. These reserved characters include:

  • The separator characters: semicolon (;), comma (,), pipe (|), tilde (~) and forward slash (/)
  • The colon (:), which is used to separate keys from values in an object
  • The curly brackets ({ and }), which are used to enclose objects
  • The square brackets ([ and ]), which are used to enclose arrays

Overall, CSON provides a more concise way to represent structured data than JSON. It allows for multiple separator characters and the omission of double quotes around keys and string values. These features make CSON a powerful tool for representing data in a compact and efficient way. 

Comments

Popular posts from this blog

Unlock protected blocks in Siemens SIMATIC Step 7

Recently I'd been called by Hindalco's Fabrication Plant division to unlock the protected blocks in Siemens SIMATIC Step 7. They were in need to unlock those blocks since an year because of 1 million Rupees of loss per month. They want to re-program those blocks but it was locked by the man who'd done the setup. From the people working in that department, I came to know that they were trying to call that man (someone from Italy) right here but he's not coming. Actually, what he'd done was that he'd locked some of the blocks and deleted the source file. And Siemens didn't provide any feature to unlock. Department people also told me that even the people working in Siemens don't know how to do it. Being a software engineer I know that any thing can be reverse engineered. So I took up the challenge. How did I unlocked the blocks? The first thing I'd done was searched about this software at Google and read about what is this software all about. Aft...

JS: The complete code example of Crypto.js (DES)

For one of the project I was trying to use crypto.js but I found that the Quick-start Guide have some deficiency in terms of library usage. So I am writing it here as a useful note for memory recap. <script src="http://crypto-js.googlecode.com/svn/tags/3.1.2/build/rollups/tripledes.js"></script> <script> var encrypted = CryptoJS.DES.encrypt("The secret message", "secret_key"); var e_msg = encrypted.toString(); console.log(e_msg); var decrypted = CryptoJS.DES.decrypt(e_msg, "secret_key"); var d_msg = decrypted.toString(CryptoJS.enc.Utf8); console.log(d_msg); </script>

Encode or decode date in 3 characters

I have developed a new way to encode/decode dates within 3 characters by using base-36 format. What is a base 36 format? Base 36 or hexatridecimal is a positional numeral system using 36 as the radix. The choice of 36 is convenient in that the digits can be represented using the Arabic numerals 0-9 and the Latin letters A-Z. In simple language, base-36 format refers to series of 0-9 followed by A-Z characters, i.e., 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ; where each character refers to the position index in series. The concept can also be represents as shown in the below table Series Character Series Character Series Character Series Character 0 0 10 A 20 K 30 U 1 1 11 B 21 L 31 V 2 2 12 C 22 M 32 W 3 3 13 D 23 N 33 X 4 4 14 E 24 O 34 Y 5 5 15 F 25 P ...