diff --git a/loadjson.m b/loadjson.m index 7a6bd96b019c9cb60505b5e7284a1e4d6185d629..bd13c9edcd3aedb04bcceee822c7084ce0e17272 100644 --- a/loadjson.m +++ b/loadjson.m @@ -47,28 +47,46 @@ arraytoken=find(inStr=='[' | inStr==']' | inStr=='"'); esc = find(inStr=='"' | inStr=='\' ); % comparable to: regexp(inStr, '["\\]'); index_esc = 1; len_esc = length(esc); -if pos <= len +jsoncount=1; +while pos <= len switch(next_char) case '{' - data = parse_object; + data{jsoncount} = parse_object; case '[' - data = parse_array; + data{jsoncount} = parse_array; otherwise error_pos('Outer level structure must be an object or an array'); end -end % if + jsoncount=jsoncount+1; +end % while -len=length(data); -if(len==1 && isstruct(data)) +jsoncount=length(data); +if(jsoncount==1 && iscell(data)) + data=data{1}; +end +if(jsoncount==1 && isstruct(data)) data=jstruct2array(data); else - for i=1:len + for i=1:jsoncount if(isstruct(data(i))) data(i)=jstruct2array(data(i)); end end end +%% +function newdata=parse_collection(id,data,obj) + +if(jsoncount>0 && exist('data','var')) + if(~iscell(data)) + newdata=cell(1); + newdata{1}=data; + data=newdata; + end +end + + + %%------------------------------------------------------------------------- function newdata=jstruct2array(data) fn=fieldnames(data);