Skip to content

Commit ce40fdf

Browse files
committed
supports ND cell array, fix #66
1 parent 5a58faf commit ce40fdf

File tree

2 files changed

+20
-36
lines changed

2 files changed

+20
-36
lines changed

savejson.m

Lines changed: 17 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -261,7 +261,7 @@
261261
elseif(isnumeric(item) || islogical(item))
262262
txt=mat2json(name,item,level,varargin{:});
263263
elseif(ischar(item))
264-
if(numel(item)>=varargin{1}.compressstringsize)
264+
if(~isempty(varargin{1}.compression) && numel(item)>=varargin{1}.compressstringsize)
265265
txt=mat2json(name,item,level,varargin{:});
266266
else
267267
txt=str2json(name,item,level,varargin{:});
@@ -294,7 +294,6 @@
294294
isnum2cell=varargin{1}.num2cell_;
295295
if(isnum2cell)
296296
item=squeeze(item);
297-
else
298297
format=varargin{1}.formatversion;
299298
if(format>1.9 && ~isvector(item))
300299
item=permute(item,ndims(item):-1:1);
@@ -309,43 +308,31 @@
309308
len=numel(item);
310309
ws=varargin{1}.whitespaces_;
311310
padding0=repmat(ws.tab,1,level);
312-
padding2=repmat(ws.tab,1,level+1);
313311
nl=ws.newline;
314312
bracketlevel=~varargin{1}.singletcell;
315313
if(len>bracketlevel)
316-
if(~isa(item,'string'))
317-
if(~isempty(name))
318-
txt={padding0, '"', decodevarname(name,varargin{1}.unpackhex),'":[', nl}; name='';
319-
else
320-
txt={padding0, '[', nl};
321-
end
314+
if(~isempty(name))
315+
txt={padding0, '"', decodevarname(name,varargin{1}.unpackhex),'":[', nl}; name='';
316+
else
317+
txt={padding0, '[', nl};
322318
end
323319
elseif(len==0)
324320
if(~isempty(name))
325321
txt={padding0, '"' decodevarname(name,varargin{1}.unpackhex) '":[]'}; name='';
326322
else
327323
txt={padding0, '[]'};
328324
end
325+
txt = sprintf('%s',txt{:});
326+
return;
329327
end
330-
for j=1:dim(2)
331-
if(dim(1)>1)
332-
txt(end+1:end+3)={padding2,'[',nl};
333-
end
334-
for i=1:dim(1)
335-
txt{end+1}=obj2json(name,item{i,j},level+(dim(1)>1)+(len>bracketlevel),varargin{:});
336-
if(i<dim(1))
337-
txt(end+1:end+2)={',' nl};
338-
end
339-
end
340-
if(dim(1)>1)
341-
txt(end+1:end+3)={nl,padding2,']'};
342-
end
343-
if(j<dim(2))
344-
txt(end+1:end+2)={',' nl};
345-
end
346-
%if(j==dim(2)) txt=sprintf('%s%s',txt,sprintf(',%s',nl)); end
328+
if(size(item,1)>1)
329+
item=num2cell(item,2:ndims(item))';
347330
end
348-
if(len>bracketlevel && ~isa(item,'string'))
331+
idx=num2cell(1:length(item));
332+
sep={[',' nl],''};
333+
txt=[txt{:},cellfun(@(x,id) [obj2json(name,x,level+(dim(1)>1)+(len>bracketlevel),varargin{:}), sep{(id==length(item))+1}], item, idx, 'UniformOutput',false)];
334+
335+
if(len>bracketlevel)
349336
txt(end+1:end+3)={nl,padding0,']'};
350337
end
351338
txt = sprintf('%s',txt{:});
@@ -718,14 +705,11 @@
718705
mat=permute(mat,ndims(mat):-1:1);
719706
end
720707
varargin{1}.num2cell_=1;
708+
varargin{1}.singletcell=0;
721709
txt=cell2json('',num2cell(mat,1),level-1,varargin{:});
722710
return;
723-
else
724-
if(isnest)
725-
if(isnum2cell)
726-
mat=mat(:).';
727-
end
728-
end
711+
elseif(isvector(mat) && isnum2cell==1)
712+
mat=mat(:).';
729713
end
730714

731715
if(size(mat,1)==1)

test/run_jsonlab_test.m

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,8 +46,8 @@ function run_jsonlab_test(tests)
4646
test_jsonlab('empty string',@savejson,'','""','compact',1);
4747
test_jsonlab('string escape',@savejson,sprintf('jdata\n\b\ashall\tprevail\t"\"\\'),'"jdata\n\b\ashall\tprevail\t\"\"\\"');
4848
if(exist('isstring'))
49-
test_jsonlab('string type',@savejson,string(sprintf('jdata\n\b\ashall\tprevail')),'"jdata\n\b\ashall\tprevail"','compact',1);
50-
test_jsonlab('string array',@savejson,[string('jdata');string('shall');string('prevail')],'["jdata","shall","prevail"]','compact',1);
49+
test_jsonlab('string type',@savejson,string(sprintf('jdata\n\b\ashall\tprevail')),'["jdata\n\b\ashall\tprevail"]','compact',1);
50+
test_jsonlab('string array',@savejson,[string('jdata'),string('shall'),string('prevail')],'["jdata","shall","prevail"]','compact',1);
5151
end
5252
test_jsonlab('row vector',@savejson,[1,2,3],'[1,2,3]');
5353
test_jsonlab('column vector',@savejson,[1;2;3],'[[1],[2],[3]]','compact',1);
@@ -58,7 +58,7 @@ function run_jsonlab_test(tests)
5858
test_jsonlab('3d (row-major) nested array',@savejson,reshape(1:(2*3*2),2,3,2),...
5959
'[[[1,7],[3,9],[5,11]],[[2,8],[4,10],[6,12]]]','compact',1,'nestarray',1);
6060
test_jsonlab('3d (column-major) nested array',@savejson,reshape(1:(2*3*2),2,3,2),...
61-
'[[[1,2],[3,4],[5,6]],[[7,8],[9,10],[11,12]]]','compact',1,'nestarray',1,'formatversion',1.9);
61+
'[[[1,2],[7,8]],[[3,4],[9,10]],[[5,6],[11,12]]]','compact',1,'nestarray',1,'formatversion',1.9);
6262
test_jsonlab('3d annotated array',@savejson,reshape(int8(1:(2*3*2)),2,3,2),...
6363
'{"_ArrayType_":"int8","_ArraySize_":[2,3,2],"_ArrayData_":[1,7,3,9,5,11,2,8,4,10,6,12]}','compact',1);
6464
test_jsonlab('complex number',@savejson,single(2+4i),...

0 commit comments

Comments
 (0)