diff --git a/examples/jsonlab_basictest.matlab b/examples/jsonlab_basictest.matlab index cfb5464325e3f1db8f717a3aa187b152b48adb23..b41c7058cfa60c8faf0058080a06c354fa363734 100644 --- a/examples/jsonlab_basictest.matlab +++ b/examples/jsonlab_basictest.matlab @@ -1,8 +1,8 @@ - < M A T L A B > - Copyright 1984-2007 The MathWorks, Inc. - Version 7.4.0.287 (R2007a) - January 29, 2007 + < M A T L A B (R) > + Copyright 1984-2010 The MathWorks, Inc. + Version 7.11.0.584 (R2010b) 64-bit (glnxa64) + August 16, 2010 To get started, type one of these: helpwin, helpdesk, or demo. @@ -529,14 +529,18 @@ ans = "lenny": 5.00, "squeeze": 6.00, "wheezy": 7.00 - }, + } + ], + [ { "Ubuntu": [ "Kubuntu", "Xubuntu", "Lubuntu" ] - }, + } + ], + [ [10.04,10.10,11.04,11.10] ] ] @@ -546,7 +550,7 @@ ans = >> json2data = - debian: {{1x3 cell}} + debian: {{1x1 cell} {1x1 cell} [10.0400 10.1000 11.0400 11.1000]} >> >> %================================================= @@ -579,21 +583,25 @@ ans = 3 ] ], - 7 - ], - [ [ 4, 5 ], [ - 8, - 9 + 6 ] ], [ - 6, - 10 + [ + 7 + ], + [ + 8, + 9 + ], + [ + 10 + ] ] ] } @@ -602,7 +610,7 @@ ans = >> json2data = - data2json: {{1x2 cell} [2x2 double] [6 10]} + data2json: {{1x3 cell} {1x3 cell}} >> >> %================================================= @@ -660,4 +668,4 @@ json2data = data2json: {{1x2 cell} {1x2 cell} {1x2 cell}} ->> >> >> >> +>> >> >> >> \ No newline at end of file diff --git a/examples/jsonlab_selftest.matlab b/examples/jsonlab_selftest.matlab index 90b25c4ef29e30760ff816125f3a60127809daf1..ac652c56faa0ecd543d1756c0d21b8b306332068 100644 --- a/examples/jsonlab_selftest.matlab +++ b/examples/jsonlab_selftest.matlab @@ -1,8 +1,8 @@ - < M A T L A B > - Copyright 1984-2007 The MathWorks, Inc. - Version 7.4.0.287 (R2007a) - January 29, 2007 + < M A T L A B (R) > + Copyright 1984-2010 The MathWorks, Inc. + Version 7.11.0.584 (R2010b) 64-bit (glnxa64) + August 16, 2010 To get started, type one of these: helpwin, helpdesk, or demo. @@ -150,5 +150,5 @@ GlossEntry{UIDSUSGMLUSortAsSUSGMLU GlossTermSU$Standard Generalized Markup L CloseDoc()}]}}}} =============================================== >> example4.json -{Udata[{Usample{Urhoi}}{Usample{Urhoi}}[[$i#U +{Udata[{Usample{Urhoi}}{Usample{Urhoi}}[[$i#U[$i#U[$i#U][SUPaperSUScissorsSUStone][CaSUb\SUc"SUd\"SUe"[SUf\"[SUg[\SUh[\"]]} >> \ No newline at end of file diff --git a/savejson.m b/savejson.m index 2d37e46f8409a4ec7ba392584808b64e03bc9a88..09ba1dd1b742c220b79927f6b2f9bec8453efe8b 100644 --- a/savejson.m +++ b/savejson.m @@ -41,10 +41,13 @@ function json=savejson(rootname,obj,varargin) % parts, and also "_ArrayIsComplex_":1 is added. % opt.ParseLogical [0|1]: if this is set to 1, logical array elem % will use true/false rather than 1/0. -% opt.NoRowBracket [1|0]: if this is set to 1, arrays with a single +% opt.SingletArray [0|1]: if this is set to 1, arrays with a single % numerical element will be shown without a square % bracket, unless it is the root object; if 0, square % brackets are forced for any numerical arrays. +% opt.SingletCell [1|0]: if 1, always enclose a cell with "[]" +% even it has only one element; if 0, brackets +% are ignored when a cell has only 1 element. % opt.ForceRootName [0|1]: when set to 1 and rootname is empty, savejson % will use the name of the passed obj variable as the % root object name; if obj is an expression and @@ -97,11 +100,17 @@ else varname=inputname(2); end if(length(varargin)==1 && ischar(varargin{1})) - opt=struct('FileName',varargin{1}); + opt=struct('filename',varargin{1}); else opt=varargin2struct(varargin{:}); end opt.IsOctave=exist('OCTAVE_VERSION','builtin'); +if(isfield(opt,'norowbracket')) + warning('Option ''NoRowBracket'' is depreciated, please use ''SingletArray'' and set its value to not(NoRowBracket)'); + if(~isfield(opt,'singletarray')) + opt.singletarray=not(opt.norowbracket); + end +end rootisarray=0; rootlevel=1; forceroot=jsonopt('ForceRootName',0,opt); @@ -184,7 +193,8 @@ ws=jsonopt('whitespaces_',struct('tab',sprintf('\t'),'newline',sprintf('\n'),'se padding0=repmat(ws.tab,1,level); padding2=repmat(ws.tab,1,level+1); nl=ws.newline; -if(len>1) +bracketlevel=~jsonopt('singletcell',1,varargin{:}); +if(len>bracketlevel) if(~isempty(name)) txt=sprintf('%s"%s": [%s',padding0, checkname(name,varargin{:}),nl); name=''; else @@ -202,7 +212,7 @@ for i=1:dim(1) txt=sprintf('%s%s[%s',txt,padding2,nl); end for j=1:dim(2) - txt=sprintf('%s%s',txt,obj2json(name,item{i,j},level+(dim(1)>1)+(len>1),varargin{:})); + txt=sprintf('%s%s',txt,obj2json(name,item{i,j},level+(dim(1)>1)+(len>bracketlevel),varargin{:})); if(j<dim(2)) txt=sprintf('%s%s',txt,sprintf(',%s',nl)); end @@ -215,7 +225,7 @@ for i=1:dim(1) end %if(j==dim(2)) txt=sprintf('%s%s',txt,sprintf(',%s',nl)); end end -if(len>1) +if(len>bracketlevel) txt=sprintf('%s%s%s]',txt,nl,padding0); end @@ -231,7 +241,7 @@ if(ndims(squeeze(item))>2) % for 3D or higher dimensions, flatten to 2D for now dim=size(item); end len=numel(item); -forcearray= (len>1 || (jsonopt('NoRowBracket',1,varargin{:})==0 && level>0)); +forcearray= (len>1 || (jsonopt('SingletArray',0,varargin{:})==1 && level>0)); ws=struct('tab',sprintf('\t'),'newline',sprintf('\n')); ws=jsonopt('whitespaces_',ws,varargin{:}); padding0=repmat(ws.tab,1,level); @@ -359,7 +369,7 @@ if(length(size(item))>2 || issparse(item) || ~isreal(item) || ... padding1,checkname(name,varargin{:}),nl,padding0,class(item),nl,padding0,regexprep(mat2str(size(item)),'\s+',','),nl); end else - if(numel(item)==1 && jsonopt('NoRowBracket',1,varargin{:})==1 && level>0) + if(numel(item)==1 && jsonopt('SingletArray',0,varargin{:})==0 && level>0) numtxt=regexprep(regexprep(matdata2json(item,level+1,varargin{:}),'^\[',''),']',''); else numtxt=matdata2json(item,level+1,varargin{:}); @@ -367,7 +377,7 @@ else if(isempty(name)) txt=sprintf('%s%s',padding1,numtxt); else - if(numel(item)==1 && jsonopt('NoRowBracket',1,varargin{:})==1) + if(numel(item)==1 && jsonopt('SingletArray',0,varargin{:})==0) txt=sprintf('%s"%s": %s',padding1,checkname(name,varargin{:}),numtxt); else txt=sprintf('%s"%s": %s',padding1,checkname(name,varargin{:}),numtxt); diff --git a/saveubjson.m b/saveubjson.m index 1e606942ae54c437c8d0f66a73b70254ba5f396e..a91f75366189a7420fbfa5f09223ed8c74730dad 100644 --- a/saveubjson.m +++ b/saveubjson.m @@ -37,10 +37,13 @@ function json=saveubjson(rootname,obj,varargin) % parts, and also "_ArrayIsComplex_":1 is added. % opt.ParseLogical [1|0]: if this is set to 1, logical array elem % will use true/false rather than 1/0. -% opt.NoRowBracket [1|0]: if this is set to 1, arrays with a single +% opt.SingletArray [0|1]: if this is set to 1, arrays with a single % numerical element will be shown without a square % bracket, unless it is the root object; if 0, square % brackets are forced for any numerical arrays. +% opt.SingletCell [1|0]: if 1, always enclose a cell with "[]" +% even it has only one element; if 0, brackets +% are ignored when a cell has only 1 element. % opt.ForceRootName [0|1]: when set to 1 and rootname is empty, saveubjson % will use the name of the passed obj variable as the % root object name; if obj is an expression and @@ -85,11 +88,17 @@ else varname=inputname(2); end if(length(varargin)==1 && ischar(varargin{1})) - opt=struct('FileName',varargin{1}); + opt=struct('filename',varargin{1}); else opt=varargin2struct(varargin{:}); end opt.IsOctave=exist('OCTAVE_VERSION','builtin'); +if(isfield(opt,'norowbracket')) + warning('Option ''NoRowBracket'' is depreciated, please use ''SingletArray'' and set its value to not(NoRowBracket)'); + if(~isfield(opt,'singletarray')) + opt.singletarray=not(opt.norowbracket); + end +end rootisarray=0; rootlevel=1; forceroot=jsonopt('ForceRootName',0,opt); @@ -149,8 +158,9 @@ if(ndims(squeeze(item))>2) % for 3D or higher dimensions, flatten to 2D for now item=reshape(item,dim(1),numel(item)/dim(1)); dim=size(item); end +bracketlevel=~jsonopt('singletcell',1,varargin{:}); len=numel(item); % let's handle 1D cell first -if(len>1) +if(len>bracketlevel) if(~isempty(name)) txt=[N_(checkname(name,varargin{:})) '[']; name=''; else @@ -168,13 +178,13 @@ for j=1:dim(2) txt=[txt '[']; end for i=1:dim(1) - txt=[txt obj2ubjson(name,item{i,j},level+(len>1),varargin{:})]; + txt=[txt obj2ubjson(name,item{i,j},level+(len>bracketlevel),varargin{:})]; end if(dim(1)>1) txt=[txt ']']; end end -if(len>1) +if(len>bracketlevel) txt=[txt ']']; end @@ -190,7 +200,7 @@ if(ndims(squeeze(item))>2) % for 3D or higher dimensions, flatten to 2D for now dim=size(item); end len=numel(item); -forcearray= (len>1 || (jsonopt('NoRowBracket',1,varargin{:})==0 && level>0)); +forcearray= (len>1 || (jsonopt('SingletArray',0,varargin{:})==1 && level>0)); if(~isempty(name)) if(forcearray) @@ -285,7 +295,7 @@ else if(isempty(name)) txt=matdata2ubjson(item,level+1,varargin{:}); else - if(numel(item)==1 && jsonopt('NoRowBracket',1,varargin{:})==1) + if(numel(item)==1 && jsonopt('SingletArray',0,varargin{:})==0) numtxt=regexprep(regexprep(matdata2ubjson(item,level+1,varargin{:}),'^\[',''),']',''); txt=[N_(checkname(name,varargin{:})) numtxt]; else