Skip to content

Commit

Permalink
add SingletCell option, add SingletArray to replace NoRowBracket
Browse files Browse the repository at this point in the history
  • Loading branch information
fangq committed Dec 11, 2015
1 parent aa37e53 commit 7dd018b
Show file tree
Hide file tree
Showing 4 changed files with 64 additions and 36 deletions.
40 changes: 24 additions & 16 deletions examples/jsonlab_basictest.matlab
Original file line number Diff line number Diff line change
@@ -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.
Expand Down Expand Up @@ -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]
]
]
Expand All @@ -546,7 +550,7 @@ ans =
>>
json2data =

debian: {{1x3 cell}}
debian: {{1x1 cell} {1x1 cell} [10.0400 10.1000 11.0400 11.1000]}

>> >>
%=================================================
Expand Down Expand Up @@ -579,21 +583,25 @@ ans =
3
]
],
7
],
[
[
4,
5
],
[
8,
9
6
]
],
[
6,
10
[
7
],
[
8,
9
],
[
10
]
]
]
}
Expand All @@ -602,7 +610,7 @@ ans =
>>
json2data =

data2json: {{1x2 cell} [2x2 double] [6 10]}
data2json: {{1x3 cell} {1x3 cell}}

>> >>
%=================================================
Expand Down Expand Up @@ -660,4 +668,4 @@ json2data =

data2json: {{1x2 cell} {1x2 cell} {1x2 cell}}

>> >> >> >>
>> >> >> >>
10 changes: 5 additions & 5 deletions examples/jsonlab_selftest.matlab
Original file line number Diff line number Diff line change
@@ -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.
Expand Down Expand Up @@ -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[\"]]}
>>
Expand Down
26 changes: 18 additions & 8 deletions savejson.m
Original file line number Diff line number Diff line change
Expand Up @@ -41,10 +41,13 @@
% 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
Expand Down Expand Up @@ -97,11 +100,17 @@
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);
Expand Down Expand Up @@ -184,7 +193,8 @@
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
Expand All @@ -202,7 +212,7 @@
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
Expand All @@ -215,7 +225,7 @@
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

Expand All @@ -231,7 +241,7 @@
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);
Expand Down Expand Up @@ -359,15 +369,15 @@
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{:});
end
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);
Expand Down
24 changes: 17 additions & 7 deletions saveubjson.m
Original file line number Diff line number Diff line change
Expand Up @@ -37,10 +37,13 @@
% 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
Expand Down Expand Up @@ -85,11 +88,17 @@
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);
Expand Down Expand Up @@ -149,8 +158,9 @@
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
Expand All @@ -168,13 +178,13 @@
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

Expand All @@ -190,7 +200,7 @@
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)
Expand Down Expand Up @@ -285,7 +295,7 @@
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
Expand Down

0 comments on commit 7dd018b

Please sign in to comment.