I want to read from a json file with Matlab and store everything in "data" as objects. After import, I need to iterate through all and extract specific values, if it's available in the object.
JSON (source):
{
"eid": 44000,
"dpm_id": {
"dpm": "fm",
"pwr": "main"
},
"fpga_id": 3189637128,
"fpga_ver": 3104379702,
"boot_id": 0,
"pbs_ver": "PBS 2012-05-07 16:41"
}
{
"sid": 1,
"hk1": {
"bela_mode": "pbs_mode",
"pbs_version": "version 1.3",
"scet": "2038-01-19T03:14:08",
"ref_time": "0:00:00",
"tc_received": 2,
"tc_exec": 2,
"tc_err_ack": 0,
"tc_err_exec": 1,
"tm_total": 1,
"tm_sent": 1,
"tm_dropped": 0,
....
Matlab (import, according to this website, resp. Class):
fname = 'FileName.json';
fid = fopen(fname);
raw = fread(fid,inf);
str = char(raw');
fclose(fid);
data = JSON.parse(str)
Problem/Question:
As you see, Matlab only reads the content of the first brackets/field. How can I import ALL brackets/fields, even if I don't know how many there are?
data =
eid: 44000
dpm_id: [1x1 struct]
fpga_id: 3.1896e+09
fpga_ver: 3.1044e+09
boot_id: 0
pbs_ver: 'PBS 2012-05-07 16:41'
Thank you!
You are trying to read a json file, which is not valid. I recommend to use jsonlint for a quick verification.
Your json looks like
{
"skipped":"A"
}
{
"skipped":"B"
}
That is not a valid syntax, because it describes two objects. After the first }
the parser expects the end of file because a json file contains one object.
Possible fixes are:
[
{
"skipped": "A"
},
{
"skipped": "B"
}
]
or
{
"aa": {
"skipped": "A"
},
"bb": {
"skipped": "B"
}
}
If your file is accessible via http
or https
, you can use the webread
function from the Data Import and Export
toolbox. It automatically converts JSON files to Matlab structures.
There is a decodeJSON
function in the toolbox (MATLABROOT/toolbox/matlab/external/interfaces/webservices/restful/private/decodeJSON.m
), but the help clearly states that:
% FOR INTERNAL USE ONLY -- This function is intentionally undocumented
% and is intended for use only within the scope of functions and classes
% in toolbox/matlab/external/interfaces/webservices/restful. Its behavior
% may change, or the class itself may be removed in a future release.
Nevertheless you can get inspiration in the content to build your own solution. It's a pity that the Mathworks didn't made this program available outside the toolbox.
Best
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With