The JSON quickly gains popularity for a good reason. To paraphrase Christophe Delord (http://christophe.delord.free.fr/tpg/)
JSON is born from a simple statement:
A simple human-like meta-language will quickly
justify its use in such cases as data exchange over the web (e.g. Google translate), configuration files, etc.
See
http://sites.google.com/site/sim4stim/2clicks/a2t.html
for an example of AUTOMATIC, PORTABLE & REUSABLE creation of GUI sets for Matlab.
(Note: p_json.m is at the core of this example too)
Hence it is worth the while to provide this novel facility to the widest possible audience of Matlab users.
Based on work from:
http://json-schema.org/
&
http://www.mathworks.com/matlabcentral/fileexchange/ ::
F.Glineur 23393-another-json-parser: Faster, Clearer & More robust than #20565
J.Feenstra 20565-json-parser
This submission also provides a very simple (yet meaningful) use example (see also the screenshot).
Your test script (called a0t on the screenshot) may look like:
% ---------------------------------------------------------
fName = 'test02.jon';
fid = fopen(fName,'rt'); inString = fscanf(fid,'%c'); fclose(fid);
data = p_json(inString)
% ---------------------------------------------------------
and hence
inString == verbatim the 'test02.jon' TEXT input file,
provided in the .zip (see links below for more detail and more definitions):
% =========================================================
inString =
{
"$schema":
{"properties":{
"name": {"type":"string"},
"age" : {"type":"integer",
"maximum":125,
"optional":true}
},
"type" : "object"
},
"name" : "John Doe",
"age" : 30
}
% =========================================================
*** See also:
Given the topical nature of the JSO notation we invite the user to take a look at places like:
Nedialko (2019). Highly portable JSON-input parser (https://www.mathworks.com/matlabcentral/fileexchange/25713-highly-portable-json-input-parser), MATLAB Central File Exchange. Retrieved .
1.1.0.0 | Corrected typos & added the auto-GUI example & its link |
Inspired by: JSON Parser, (another) JSON Parser
Inspired: JSONLab (Development Branch), Microscopy Image Browser (MIB), Microscopy Image Browser 2 (MIB2), RUBIK1, JSONLab: a toolbox to encode/decode JSON files
Create scripts with code, output, and formatted text in a single executable document.
Ilya Belevich (view profile)
Qianqian Fang (view profile)
FYI, an optimized JSON parser, JSONlab, based on this work is available at
http://www.mathworks.com/matlabcentral/fileexchange/33381
It is 10x to 100x faster. A JSON encoder is also provided in JSONlab.
Tanyer Alan (view profile)
Dustin (view profile)
I kinda wish there were a more straight-forward way of accessing structs that live inside an array. For example, in a JSON string that has a series of unkeyed objects living in an array (i.e., "arrayName": [ {"color": "red"}, {"color": "green"}, {"color": "blue"} ]), accessing those objects is odd. Instead of using arrayName(i).color you must use arrayName{1,i}.color. Not a huge deal, just different than what I was expecting.
Other than that, it is very particular about properly-formatted JSON string inputs, and that's a good thing. Nice job.