diff --git a/examples/jsonlab_speedtest.m b/examples/jsonlab_speedtest.m index b93a0751acdbba53e8a1ca736e9f76d263547da8..4990fba0d2d5249be2bdd48d35ec9269c6f1b7c8 100644 --- a/examples/jsonlab_speedtest.m +++ b/examples/jsonlab_speedtest.m @@ -8,9 +8,9 @@ tsave=zeros(len,1); tload=zeros(len,1); for i=1:len tic; - json=savebj('data',struct('d1',rand(datalen(i),3),'d2',rand(datalen(i),3)>0.5)); + json=savejson('data',struct('d1',rand(datalen(i),3),'d2',rand(datalen(i),3)>0.5)); tsave(i)=toc; - data=loadbj(json); + data=loadjson(json); tload(i)=toc-tsave(i); fprintf(1,'matrix size: %d\n',datalen(i)); end diff --git a/loadjson.m b/loadjson.m index cfc13192ad0f31cb3ab8492e093414fc94462118..51e3df6b076916595e237bdc0d27bb51addbe58d 100644 --- a/loadjson.m +++ b/loadjson.m @@ -221,10 +221,10 @@ function [object, pos,index_esc] = parse_array(inputstr, pos, esc, index_esc, va % next handle 2D array, these are most common ones if(maxlevel==2 && ~isempty(regexp(arraystr(2:end),'^\s*\[','once'))) - isndarray=nestbracket2dim(arraystr,'[]',1); + [dims,isndarray]=nestbracket2dim(arraystr); rowstart=find(arraystr(2:end)=='[',1)+1; if(rowstart && isndarray) - [obj, nextidx]=parse2darray(inputstr,pos+rowstart,arraystr); + [obj, nextidx]=parsendarray(arraystr,dims); if(nextidx>=length(arraystr)-1) object=obj; if(format>1.9) @@ -243,26 +243,21 @@ function [object, pos,index_esc] = parse_array(inputstr, pos, esc, index_esc, va % for N-D packed array in a nested array construct, % in the future can replace 1d and 2d cases if(maxlevel>2 && ~isempty(regexp(arraystr(2:end),'^\s*\[\s*\[','once'))) - astr=arraystr; - [dims,isndarray]=nestbracket2dim(astr); - if(isndarray && (any(dims==0) || all(mod(dims(:),1) == 0))) % all dimensions are integers - this can be problematic - astr=arraystr; - astr(astr=='[')=''; - astr(astr==']')=''; - astr=regexprep(astr,'\s*,',','); - astr=regexprep(astr,'\s*$',''); - [obj, count, errmsg, nextidx]=sscanf(astr,'%f,',inf); - if(nextidx>=length(astr)-1) - object=reshape(obj,dims); - if(format>1.9) - object=permute(object,ndims(object):-1:1); - end - pos=endpos; - pos=parse_char(inputstr, pos, ']'); - if(pbar>0) - waitbar(pos/length(inStr),pbar,'loading ...'); - end - return; + [dims,isndarray]=nestbracket2dim(arraystr); + rowstart=find(arraystr(2:end)=='[',1)+1; + if(rowstart && isndarray) + [obj, nextidx]=parsendarray(arraystr,dims); + if(nextidx>=length(arraystr)-1) + object=obj; + if(format>1.9) + object=permute(object,ndims(object):-1:1); + end + pos=endpos; + pos=parse_char(inputstr, pos, ']'); + if(pbar>0) + waitbar(pos/length(inStr),pbar,'loading ...'); + end + return; end end end @@ -544,26 +539,19 @@ function arraystr=sscanf_prep(str) arraystr=regexprep(arraystr,'"_NaN_"','NaN'); arraystr=regexprep(arraystr,'"([-+]*)_Inf_"','$1Inf'); end - arraystr(arraystr==sprintf('\n'))=[]; - arraystr(arraystr==sprintf('\r'))=[]; + arraystr(arraystr==sprintf('\n'))=' '; + arraystr(arraystr==sprintf('\r'))=' '; end %%------------------------------------------------------------------------- -function [obj, nextidx,nextdim]=parse2darray(inputstr,startpos,arraystr) - rowend=match_bracket(inputstr,startpos); - rowstr=sscanf_prep(inputstr(startpos-1:rowend)); - [vec1, nextdim, errmsg, nextidx]=sscanf(rowstr,'%f,',[1 inf]); - if(nargin==2) - obj=nextdim; - return; - end +function [obj, nextidx]=parsendarray(arraystr, dims) astr=arraystr; - astr(astr=='[')=''; - astr(astr==']')=''; - astr=regexprep(deblank(astr),'\s+,',','); - [obj, count, errmsg, nextidx]=sscanf(astr,'%f,',inf); + astr(astr=='[')=' '; + astr(astr==']')=' '; + astr(astr==',')=' '; + [obj, count, errmsg, nextidx]=sscanf(astr,'%f',inf); if(nextidx>=length(astr)-1) - obj=reshape(obj,nextdim,numel(obj)/nextdim); + obj=reshape(obj,dims); nextidx=length(arraystr)+1; end end