Skip to content

Commit 0f870c0

Browse files
committed
make demos to run with jdataencode, but still have issues
1 parent 874945f commit 0f870c0

File tree

4 files changed

+74
-49
lines changed

4 files changed

+74
-49
lines changed

jdataencode.m

Lines changed: 32 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -73,8 +73,8 @@
7373
newitem=table2jd(item,varargin{:});
7474
elseif(isa(item,'digraph') || isa(item,'graph'))
7575
newitem=graph2jd(item,varargin{:});
76-
elseif(~isoctavemesh)
77-
newitem=any2jd(item,varargin{:});
76+
elseif(isobject(item))
77+
newitem=matlabobject2jd(item,varargin{:});
7878
else
7979
newitem=item;
8080
end
@@ -128,7 +128,9 @@
128128
%%-------------------------------------------------------------------------
129129
function newitem=mat2jd(item,varargin)
130130

131-
if(isempty(item) || isa(item,'string') || ischar(item) || (isvector(item) && isreal(item) && ~issparse(item)))
131+
if(isempty(item) || isa(item,'string') || ischar(item) || ...
132+
(isvector(item) && isreal(item) && ~issparse(item)) || ...
133+
jsonopt('NestArray',0,varargin{:}))
132134
newitem=item;
133135
return;
134136
end
@@ -142,15 +144,15 @@
142144

143145
N=@(x) N_(x,varargin{:});
144146

145-
newitem=struct(N('_ArraySize_'),size(item),N('_ArrayType_'),class(item));
147+
newitem=struct(N('_ArrayType_'),class(item),N('_ArraySize_'),size(item));
146148

147149
if(isreal(item))
148150
if(issparse(item))
149151
fulldata=full(item(find(item)));
150152
newitem.(N('_ArrayIsSparse_'))=true;
151153
newitem.(N('_ArrayZipSize_'))=[2+(~isvector(item)),length(fulldata)];
152154
if(isvector(item))
153-
newitem.(N('_ArrayData_'))=[find(item)', fulldata(:)'];
155+
newitem.(N('_ArrayData_'))=[find(item(:))', fulldata(:)'];
154156
else
155157
[ix,iy]=find(item);
156158
newitem.(N('_ArrayData_'))=[ix(:)' , iy(:)', fulldata(:)'];
@@ -166,14 +168,14 @@
166168
newitem.(N('_ArrayIsSparse_'))=true;
167169
newitem.(N('_ArrayZipSize_'))=[3+(~isvector(item)),length(fulldata)];
168170
if(isvector(item))
169-
newitem.(N('_ArrayData_'))=[find(item)', real(fulldata(:)'), imag(fulldata(:)')];
171+
newitem.(N('_ArrayData_'))=[find(item(:))', real(fulldata(:))', imag(fulldata(:))'];
170172
else
171173
[ix,iy]=find(item);
172-
newitem.(N('_ArrayData_'))=[ix(:)' , iy(:)' , real(fulldata(:)'), imag(fulldata(:)')];
174+
newitem.(N('_ArrayData_'))=[ix(:)' , iy(:)' , real(fulldata(:))', imag(fulldata(:))'];
173175
end
174176
else
175177
newitem.(N('_ArrayZipSize_'))=[2,numel(item)];
176-
newitem.(N('_ArrayData_'))=[real(item(:)'), imag(item(:)')];
178+
newitem.(N('_ArrayData_'))=[real(item(:))', imag(item(:))'];
177179
end
178180
end
179181

@@ -198,9 +200,9 @@
198200
function newitem=table2jd(item,varargin)
199201

200202
newitem=struct;
201-
newitem(N_('_TableRows_',varargin{:}))=item.Properties.RowNames';
202-
newitem(N_('_TableCols_',varargin{:}))=item.Properties.VariableNames;
203-
newitem(N_('_TableRecords_',varargin{:}))=table2cell(item);
203+
newitem.(N_('_TableRows_',varargin{:}))=item.Properties.RowNames';
204+
newitem.(N_('_TableCols_',varargin{:}))=item.Properties.VariableNames;
205+
newitem.(N_('_TableRecords_',varargin{:}))=table2cell(item);
204206

205207
%%-------------------------------------------------------------------------
206208
function newitem=graph2jd(item,varargin)
@@ -229,6 +231,25 @@
229231
newitem.(N_('_GraphEdges_',varargin{:}))=edgenodes;
230232
end
231233

234+
%%-------------------------------------------------------------------------
235+
function newitem=matlabobject2jd(item,varargin)
236+
try
237+
if numel(item) == 0 %empty object
238+
newitem = struct();
239+
elseif numel(item) == 1 %
240+
newitem = char(item);
241+
else
242+
propertynames = properties(item);
243+
for p = 1:numel(propertynames)
244+
for o = numel(item):-1:1 % aray of objects
245+
newitem(o).(propertynames{p}) = item(o).(propertynames{p});
246+
end
247+
end
248+
end
249+
catch
250+
newitem=any2jd(item,varargin{:});
251+
end
252+
232253
%%-------------------------------------------------------------------------
233254
function newitem=any2jd(item,varargin)
234255

loadmsgpack.m

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -209,7 +209,7 @@
209209
for n=1:len
210210
[out{n}, idx] = parse(bytes, idx);
211211
end
212-
if(true)
212+
if(isnumeric(out{1}))
213213
try
214214
oldobj=out;
215215
out=cell2mat(out);

savejson.m

Lines changed: 21 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@
132132
opt.IsOctave=isoctavemesh;
133133

134134
if(jsonopt('PreEncode',0,opt))
135-
obj=jdataencode(obj,opt);
135+
obj=jdataencode(obj,'Base64',1,'UseArrayZipSize',0,opt);
136136
end
137137

138138
dozip=jsonopt('Compression','',opt);
@@ -235,12 +235,10 @@
235235
txt=matlabtable2json(name,item,level,varargin{:});
236236
elseif(isa(item,'graph') || isa(item,'digraph'))
237237
txt=struct2json(name,jdataencode(item),level,varargin{:});
238+
elseif(isobject(item))
239+
txt=matlabobject2json(name,item,level,varargin{:});
238240
else
239-
if(isoctavemesh)
240-
txt=matlabobject2json(name,item,level,varargin{:});
241-
else
242-
txt=any2json(name,item,level,varargin{:});
243-
end
241+
txt=any2json(name,item,level,varargin{:});
244242
end
245243

246244
%%-------------------------------------------------------------------------
@@ -614,21 +612,24 @@
614612

615613
%%-------------------------------------------------------------------------
616614
function txt=matlabobject2json(name,item,level,varargin)
617-
if numel(item) == 0 %empty object
618-
st = struct();
619-
elseif numel(item) == 1 %
620-
st = struct();
621-
txt = str2json(name, char(item), level, varargin(:));
622-
return
623-
else
624-
propertynames = properties(item);
625-
for p = 1:numel(propertynames)
626-
for o = numel(item):-1:1 % aray of objects
627-
st(o).(propertynames{p}) = item(o).(propertynames{p});
628-
end
615+
try
616+
if numel(item) == 0 %empty object
617+
st = struct();
618+
elseif numel(item) == 1 %
619+
txt = str2json(name, char(item), level, varargin(:));
620+
return
621+
else
622+
propertynames = properties(item);
623+
for p = 1:numel(propertynames)
624+
for o = numel(item):-1:1 % aray of objects
625+
st(o).(propertynames{p}) = item(o).(propertynames{p});
626+
end
627+
end
629628
end
629+
txt=struct2json(name,st,level,varargin{:});
630+
catch
631+
txt = any2json(name,item, level, varargin(:));
630632
end
631-
txt=struct2json(name,st,level,varargin{:});
632633

633634
%%-------------------------------------------------------------------------
634635
function txt=matlabtable2json(name,item,level,varargin)
@@ -712,7 +713,7 @@
712713
%%-------------------------------------------------------------------------
713714
function txt=any2json(name,item,level,varargin)
714715
st=containers.Map();
715-
st('_DataInfo_')=struct('MATLABObjectClass',class(item),'MATLABObjectSize',size(item));;
716+
st('_DataInfo_')=struct('MATLABObjectClass',class(item),'MATLABObjectSize',size(item));
716717
st('_ByteStream_')=char(base64encode(getByteStreamFromArray(item)));
717718

718719
if(isempty(name))

saveubjson.m

Lines changed: 20 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,7 @@
130130
opt.IsOctave=isoctavemesh;
131131

132132
if(jsonopt('PreEncode',0,opt))
133-
obj=jdataencode(obj,opt);
133+
obj=jdataencode(obj,'Base64',0,opt);
134134
end
135135

136136
dozip=jsonopt('Compression','',opt);
@@ -235,12 +235,10 @@
235235
txt=matlabtable2ubjson(name,item,level,varargin{:});
236236
elseif(isa(item,'graph') || isa(item,'digraph'))
237237
txt=struct2ubjson(name,jdataencode(item),level,varargin{:});
238+
elseif(isobject(item))
239+
txt=matlabobject2ubjson(name,item,level,varargin{:});
238240
else
239-
if(isoctavemesh)
240-
txt=matlabobject2ubjson(name,item,level,varargin{:});
241-
else
242-
txt=any2ubjson(name,item,level,varargin{:});
243-
end
241+
txt=any2ubjson(name,item,level,varargin{:});
244242
end
245243

246244
%%-------------------------------------------------------------------------
@@ -613,19 +611,24 @@
613611

614612
%%-------------------------------------------------------------------------
615613
function txt=matlabobject2ubjson(name,item,level,varargin)
616-
st = struct();
617-
if numel(item) > 0 %non-empty object
618-
% "st = struct(item);" would produce an inmutable warning, because it
619-
% make the protected and private properties visible. Instead we get the
620-
% visible properties
621-
propertynames = properties(item);
622-
for p = 1:numel(propertynames)
623-
for o = numel(item):-1:1 % aray of objects
624-
st(o).(propertynames{p}) = item(o).(propertynames{p});
625-
end
614+
try
615+
if numel(item) == 0 %empty object
616+
st = struct();
617+
elseif numel(item) == 1 %
618+
txt = str2ubjson(name, char(item), level, varargin(:));
619+
return
620+
else
621+
propertynames = properties(item);
622+
for p = 1:numel(propertynames)
623+
for o = numel(item):-1:1 % aray of objects
624+
st(o).(propertynames{p}) = item(o).(propertynames{p});
625+
end
626+
end
626627
end
628+
txt = struct2ubjson(name,st,level,varargin{:});
629+
catch
630+
txt = any2ubjson(name,item, level, varargin(:));
627631
end
628-
txt=struct2ubjson(name,st,level,varargin{:});
629632

630633
%%-------------------------------------------------------------------------
631634
function txt=matdata2ubjson(mat,level,varargin)

0 commit comments

Comments
 (0)