JSON (JavaScript Object Notation) is a lightweight data-interchange format. It is easy for humans to read and write. It is easy for machines to parse and generate. It is based on a subset of the JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999.
The JSON format is often used for serializing and transmitting structured data over a network connection. It is primarily used to transmit data between a server and web application, serving as an alternative to XML.
For more information, please read:
http://json.org/
http://en.wikipedia.org/wiki/Json
This toolbox can be installed directly from Scilab using the ATOMS package manager. In Scilab, issue the following command to update your Scilab package list:
atomsSystemUpdate
Issue the following command to install this toolbox:
atomsInstall json
Since JSON supports key-value objects, the parser interprets the key-value JSON objects as Scilab struct
objects.
(Type help struct
in Scilab for more information on Scilab structures.)
Consider the following example:
{
"orderID": 12345,
"shopperName": "John Smith",
"shopperEmail": "johnsmith@example.com",
"contents": [
{
"productID": 34,
"productName": "SuperWidget",
"quantity": 1
},
{
"productID": 56,
"productName": "WonderWidget",
"quantity": 3
}
],
"orderCompleted": true
}
Assuming the above JSON text is saved in a text file in the current working directory, the text can be loaded into Scilab and parsed thus:
json_eg = mgetl("eg_1.json");
mystruct = JSONParse(json_eg)
This returns the following Scilab structure:
mystruct =
orderID: 12345
shopperName: "John Smith"
shopperEmail: "johnsmith@example.com"
contents: [1x2 struct]
orderCompleted: "%T"
Individual elements in the structure can be accessed thus:
Example 1:
-->mystruct.orderID
ans =
12345.
Example 2:
-->mystruct.contents.productName
ans =
ans(1)
SuperWidget
ans(2)
WonderWidget
Note that the JSON values of true
, false
and null
are represented in Scilab as %T
, %F
and %Nan
. Since Scilab contains a function called null()
, the function will be temporarily redefined by the parser. However, the parser will restore the function after it is done parsing.
A special aspect about this particular parser is the way it interprets vectors and matrices:
JSON of the form:
"[1, 2, 3, 4, 5]"
is returned as a (row) vector is Scilab, as one might expect.
JSON of the form:
"[[1, 2, 3], [4, 5, 6], [7, 8, 9]]"
is returned as a two-dimensional matrix in Scilab:
1. 2. 3.
4. 5. 6.
7. 8. 9.
as one might expect, since the above JSON is fundamentally an example of a set of arrays within an array. There is currently no support for hypermatrices. If you need them, please add an issue and I'll consider adding support.
Proceeding with the above convention, a Scilab column vector would be defined in JSON thus:
"[[1], [2], [3], [4]]"
which when parsed, returns this:
1.
2.
3.
4.
- The parser takes into consideration JSON backslash-escapes. Except for the backslash-quote, all other backslash-escapes are left as is as they do not affect Scilab strings. Backslash-quotes are taken into consideration during the parsing process.
- This version only has a parser. The next major version will include a JSON encoder as well. Suggestions on this are welcome.
This project is being carried out at Indian Institute of Technology Bombay and funded by the National Mission on Education through ICT, MHRD, Government of India.