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>

How to convert JIRA story into sub-task or defect?

Many times we entangled in the situation where we have made a  story  in JIRA but later on realised that it should have to be  defect  or in other case,  sub-task  of another  story . Story → Sub-task So the workaround for converting the story into defect is given below: Open your  story Click on  more  option Click on the  Convert to sub-task  option in the dropdown You would be asked to choose  Parent  story, so chose relevant story After submit, your  story  gets converted into  sub-task Story → Defect Now if you want the story to be converted into defect, then you should first convert it into sub-task. Thereafter, you can convert that sub-task into defect as given below: Open the  sub-task Click on  more  option Click on the  Convert to issue  option in the dropdown You would be asked to fill up relevant fields required for raising a  defect , fill them up as required After submit, your  sub-task  gets converted into  defect .