Skip to content

Commit a83dd0f

Browse files
committed
add matlab demo script and small samples on basic features
1 parent 0145358 commit a83dd0f

4 files changed

Lines changed: 2696 additions & 0 deletions

File tree

Lines changed: 332 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,332 @@
1+
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
2+
% Demo on using JSONLab 2.0 to encode and decode complex data
3+
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
4+
5+
if(~exist('saveubjson','file') || ~exist('loadubjson','file'))
6+
error('you must install JSONLab 2.0 from https://github.com/fangq/jsonlab')
7+
end
8+
9+
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
10+
% Binary JData encoding and decoding using saveubjson and loadubjson
11+
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
12+
13+
rngstate = rand ('state');
14+
randseed=hex2dec('623F9A9E');
15+
clear data2json json2data
16+
17+
fprintf(1,'\n%%=================================================\n')
18+
fprintf(1,'%% a simple scalar value \n')
19+
fprintf(1,'%%=================================================\n\n')
20+
21+
data2json=pi
22+
saveubjson('',data2json)
23+
json2data=loadubjson(ans)
24+
25+
fprintf(1,'\n%%=================================================\n')
26+
fprintf(1,'%% an empty array \n')
27+
fprintf(1,'%%=================================================\n\n')
28+
29+
data2json=[]
30+
saveubjson('empty',data2json)
31+
json2data=loadubjson(ans)
32+
33+
fprintf(1,'\n%%=================================================\n')
34+
fprintf(1,'%% an ampty string \n')
35+
fprintf(1,'%%=================================================\n\n')
36+
37+
data2json=''
38+
saveubjson('emptystr',data2json)
39+
json2data=loadubjson(ans)
40+
41+
fprintf(1,'\n%%=================================================\n')
42+
fprintf(1,'%% a simple row vector \n')
43+
fprintf(1,'%%=================================================\n\n')
44+
45+
data2json=1:3
46+
saveubjson('',data2json)
47+
json2data=loadubjson(ans)
48+
49+
fprintf(1,'\n%%=================================================\n')
50+
fprintf(1,'%% a simple column vector \n')
51+
fprintf(1,'%%=================================================\n\n')
52+
53+
data2json=(1:3)'
54+
saveubjson('',data2json)
55+
json2data=loadubjson(ans)
56+
57+
fprintf(1,'\n%%=================================================\n')
58+
fprintf(1,'%% a string array \n')
59+
fprintf(1,'%%=================================================\n\n')
60+
61+
data2json=['AC';'EG']
62+
saveubjson('',data2json)
63+
json2data=loadubjson(ans)
64+
65+
fprintf(1,'\n%%=================================================\n')
66+
fprintf(1,'%% a string with escape symbols \n')
67+
fprintf(1,'%%=================================================\n\n')
68+
69+
data2json=sprintf('AB\tCD\none"two')
70+
saveubjson('str',data2json)
71+
json2data=loadubjson(ans)
72+
73+
fprintf(1,'\n%%=================================================\n')
74+
fprintf(1,'%% a mix-typed cell \n')
75+
fprintf(1,'%%=================================================\n\n')
76+
77+
data2json={'a',true,[2;3]}
78+
saveubjson('',data2json)
79+
json2data=loadubjson(ans)
80+
81+
fprintf(1,'\n%%=================================================\n')
82+
fprintf(1,'%% a 3-D array in nested array form\n')
83+
fprintf(1,'%%=================================================\n\n')
84+
85+
data2json=reshape(1:(2*4*6),[2,4,6]);
86+
saveubjson('',data2json,'NestArray',1)
87+
json2data=loadubjson(ans)
88+
% if(any(json2data(:)~=data2json(:)) || any(size(json2data)~=size(data2json)))
89+
% warning('conversion does not preserve original data');
90+
% end
91+
92+
fprintf(1,'\n%%=================================================\n')
93+
fprintf(1,'%% a 3-D array in annotated array form\n')
94+
fprintf(1,'%%=================================================\n\n')
95+
96+
data2json=reshape(1:(2*4*6),[2,4,6]);
97+
saveubjson('',data2json,'NestArray',0)
98+
json2data=loadubjson(ans)
99+
if(any(json2data(:)~=data2json(:)) || any(size(json2data)~=size(data2json)))
100+
warning('conversion does not preserve original data');
101+
end
102+
103+
fprintf(1,'\n%%=================================================\n')
104+
fprintf(1,'%% a 4-D array in annotated array form\n')
105+
fprintf(1,'%%=================================================\n\n')
106+
107+
data2json=reshape(1:(2*4*3*2),[2,4,3,2]);
108+
saveubjson('',data2json,'NestArray',0) % nestarray for 4-D or above is not working
109+
json2data=loadubjson(ans)
110+
if(any(json2data(:)~=data2json(:)) || any(size(json2data)~=size(data2json)))
111+
warning('conversion does not preserve original data');
112+
end
113+
114+
fprintf(1,'\n%%=================================================\n')
115+
fprintf(1,'%% a 3-D array in nested array form (JSONLab 1.9)\n')
116+
fprintf(1,'%%=================================================\n\n')
117+
118+
data2json=reshape(1:(2*4*6),[2,4,6]);
119+
saveubjson('',data2json,'NestArray',1,'FormatVersion',1.8)
120+
121+
fprintf(1,'\n%%=================================================\n')
122+
fprintf(1,'%% a 3-D array in annotated array form (JSONLab 1.9 or earlier)\n')
123+
fprintf(1,'%%=================================================\n\n')
124+
125+
data2json=reshape(1:(2*4*6),[2,4,6]);
126+
saveubjson('',data2json,'NestArray',0,'FormatVersion',1.8)
127+
128+
fprintf(1,'\n%%=================================================\n')
129+
fprintf(1,'%% a complex number\n')
130+
fprintf(1,'%%=================================================\n\n')
131+
132+
data2json=1+2i
133+
saveubjson('',data2json)
134+
json2data=loadubjson(ans)
135+
136+
fprintf(1,'\n%%=================================================\n')
137+
fprintf(1,'%% a complex matrix\n')
138+
fprintf(1,'%%=================================================\n\n')
139+
140+
data2json=magic(6);
141+
data2json=data2json(:,1:3)+data2json(:,4:6)*1i
142+
saveubjson('',data2json)
143+
json2data=loadubjson(ans)
144+
145+
fprintf(1,'\n%%=================================================\n')
146+
fprintf(1,'%% MATLAB special constants\n')
147+
fprintf(1,'%%=================================================\n\n')
148+
149+
data2json=[NaN Inf -Inf]
150+
saveubjson('specials',data2json)
151+
json2data=loadubjson(ans)
152+
153+
fprintf(1,'\n%%=================================================\n')
154+
fprintf(1,'%% a real sparse matrix\n')
155+
fprintf(1,'%%=================================================\n\n')
156+
157+
data2json=sprand(10,10,0.1)
158+
saveubjson('sparse',data2json)
159+
json2data=loadubjson(ans)
160+
161+
fprintf(1,'\n%%=================================================\n')
162+
fprintf(1,'%% a complex sparse matrix\n')
163+
fprintf(1,'%%=================================================\n\n')
164+
165+
data2json=data2json-data2json*1i
166+
saveubjson('complex_sparse',data2json)
167+
json2data=loadubjson(ans)
168+
169+
fprintf(1,'\n%%=================================================\n')
170+
fprintf(1,'%% an all-zero sparse matrix\n')
171+
fprintf(1,'%%=================================================\n\n')
172+
173+
data2json=sparse(2,3);
174+
saveubjson('all_zero_sparse',data2json)
175+
json2data=loadubjson(ans)
176+
177+
fprintf(1,'\n%%=================================================\n')
178+
fprintf(1,'%% an empty sparse matrix\n')
179+
fprintf(1,'%%=================================================\n\n')
180+
181+
data2json=sparse([]);
182+
saveubjson('empty_sparse',data2json)
183+
json2data=loadubjson(ans)
184+
185+
fprintf(1,'\n%%=================================================\n')
186+
fprintf(1,'%% an empty 0-by-0 real matrix\n')
187+
fprintf(1,'%%=================================================\n\n')
188+
189+
data2json=[];
190+
saveubjson('empty_0by0_real',data2json)
191+
json2data=loadubjson(ans)
192+
193+
fprintf(1,'\n%%=================================================\n')
194+
fprintf(1,'%% an empty 0-by-3 real matrix\n')
195+
fprintf(1,'%%=================================================\n\n')
196+
197+
data2json=zeros(0,3);
198+
saveubjson('empty_0by3_real',data2json)
199+
json2data=loadubjson(ans)
200+
201+
fprintf(1,'\n%%=================================================\n')
202+
fprintf(1,'%% a sparse real column vector\n')
203+
fprintf(1,'%%=================================================\n\n')
204+
205+
data2json=sparse([0,3,0,1,4]');
206+
saveubjson('sparse_column_vector',data2json)
207+
json2data=loadubjson(ans)
208+
209+
fprintf(1,'\n%%=================================================\n')
210+
fprintf(1,'%% a sparse complex column vector\n')
211+
fprintf(1,'%%=================================================\n\n')
212+
213+
data2json=data2json-1i*data2json;
214+
saveubjson('complex_sparse_column_vector',data2json)
215+
json2data=loadubjson(ans)
216+
217+
fprintf(1,'\n%%=================================================\n')
218+
fprintf(1,'%% a sparse real row vector\n')
219+
fprintf(1,'%%=================================================\n\n')
220+
221+
data2json=sparse([0,3,0,1,4]);
222+
saveubjson('sparse_row_vector',data2json)
223+
json2data=loadubjson(ans)
224+
225+
fprintf(1,'\n%%=================================================\n')
226+
fprintf(1,'%% a sparse complex row vector\n')
227+
fprintf(1,'%%=================================================\n\n')
228+
229+
data2json=data2json-1i*data2json;
230+
saveubjson('complex_sparse_row_vector',data2json)
231+
json2data=loadubjson(ans)
232+
233+
fprintf(1,'\n%%=================================================\n')
234+
fprintf(1,'%% a structure\n')
235+
fprintf(1,'%%=================================================\n\n')
236+
237+
data2json=struct('name','Think Different','year',1997,'magic',magic(3),...
238+
'misfits',[Inf,NaN],'embedded',struct('left',true,'right',false))
239+
saveubjson('astruct',data2json,struct('ParseLogical',1))
240+
json2data=loadubjson(ans)
241+
class(json2data.astruct.embedded.left)
242+
243+
fprintf(1,'\n%%=================================================\n')
244+
fprintf(1,'%% a structure array\n')
245+
fprintf(1,'%%=================================================\n\n')
246+
247+
data2json=struct('name','Nexus Prime','rank',9);
248+
data2json(2)=struct('name','Sentinel Prime','rank',9);
249+
data2json(3)=struct('name','Optimus Prime','rank',9);
250+
saveubjson('Supreme Commander',data2json)
251+
json2data=loadubjson(ans)
252+
253+
fprintf(1,'\n%%=================================================\n')
254+
fprintf(1,'%% a cell array\n')
255+
fprintf(1,'%%=================================================\n\n')
256+
257+
data2json=cell(3,1);
258+
data2json{1}=struct('buzz',1.1,'rex',1.2,'bo',1.3,'hamm',2.0,'slink',2.1,'potato',2.2,...
259+
'woody',3.0,'sarge',3.1,'etch',4.0,'lenny',5.0,'squeeze',6.0,'wheezy',7.0);
260+
data2json{2}=struct('Ubuntu',['Kubuntu';'Xubuntu';'Lubuntu']);
261+
data2json{3}=[10.04,10.10,11.04,11.10]
262+
saveubjson('debian',data2json,struct('FloatFormat','%.2f'))
263+
json2data=loadubjson(ans)
264+
265+
fprintf(1,'\n%%=================================================\n')
266+
fprintf(1,'%% invalid field-name handling\n')
267+
fprintf(1,'%%=================================================\n\n')
268+
269+
json2data=loadubjson(saveubjson('',loadjson('{"ValidName":1, "_InvalidName":2, ":Field:":3, "项目":"绝密"}')))
270+
271+
fprintf(1,'\n%%=================================================\n')
272+
fprintf(1,'%% a function handle\n')
273+
fprintf(1,'%%=================================================\n\n')
274+
275+
data2json=@(x) x+1
276+
saveubjson('handle',data2json)
277+
json2data=loadubjson(ans)
278+
279+
fprintf(1,'\n%%=================================================\n')
280+
fprintf(1,'%% a 2D cell array\n')
281+
fprintf(1,'%%=================================================\n\n')
282+
283+
data2json={{1,{2,3}},{4,5},{6};{7},{8,9},{10}};
284+
saveubjson('data2json',data2json)
285+
json2data=loadubjson(ans) % only saveubjson works for cell arrays, loadubjson has issues
286+
287+
fprintf(1,'\n%%=================================================\n')
288+
fprintf(1,'%% a 2D struct array\n')
289+
fprintf(1,'%%=================================================\n\n')
290+
291+
data2json=repmat(struct('idx',0,'data','structs'),[2,3])
292+
for i=1:6
293+
data2json(i).idx=i;
294+
end
295+
saveubjson('data2json',data2json)
296+
json2data=loadubjson(ans)
297+
298+
299+
if(exist('datetime'))
300+
fprintf(1,'\n%%=================================================\n')
301+
fprintf(1,'%% datetime object \n')
302+
fprintf(1,'%%=================================================\n\n')
303+
304+
data2json=datetime({'8 April 2015','9 May 2015'}, 'InputFormat','d MMMM yyyy')
305+
saveubjson('',data2json)
306+
json2data=loadubjson(ans)
307+
end
308+
309+
if(exist('containers.Map'))
310+
fprintf(1,'\n%%=================================================\n')
311+
fprintf(1,'%% a container.Maps object \n')
312+
fprintf(1,'%%=================================================\n\n')
313+
314+
data2json=containers.Map({'Andy','William','Om'},[21,21,22])
315+
saveubjson('',data2json)
316+
json2data=loadubjson(ans)
317+
end
318+
319+
if(exist('istable'))
320+
fprintf(1,'\n%%=================================================\n')
321+
fprintf(1,'%% a table object \n')
322+
fprintf(1,'%%=================================================\n\n')
323+
324+
Names={'Andy','William','Om'}';
325+
Age=[21,21,22]';
326+
data2json=table(Names,Age)
327+
saveubjson('table',table(Names,Age))
328+
json2data=loadubjson(ans)
329+
end
330+
331+
rand ('state',rngstate);
332+

0 commit comments

Comments
 (0)