diff --git a/savejson.m b/savejson.m
index 080f277d0f2ca7170c39b92bd51d53981203d8fd..3ffc57acd7250759eff8825a219ee17e4edf7711 100644
--- a/savejson.m
+++ b/savejson.m
@@ -261,7 +261,7 @@ elseif(isstruct(item))
 elseif(isnumeric(item) || islogical(item))
     txt=mat2json(name,item,level,varargin{:});
 elseif(ischar(item))
-    if(numel(item)>=varargin{1}.compressstringsize)
+    if(~isempty(varargin{1}.compression) && numel(item)>=varargin{1}.compressstringsize)
         txt=mat2json(name,item,level,varargin{:});
     else
         txt=str2json(name,item,level,varargin{:});
@@ -294,7 +294,6 @@ end
 isnum2cell=varargin{1}.num2cell_;
 if(isnum2cell)
     item=squeeze(item);
-else
     format=varargin{1}.formatversion;
     if(format>1.9 && ~isvector(item))
         item=permute(item,ndims(item):-1:1);
@@ -309,16 +308,13 @@ end
 len=numel(item);
 ws=varargin{1}.whitespaces_;
 padding0=repmat(ws.tab,1,level);
-padding2=repmat(ws.tab,1,level+1);
 nl=ws.newline;
 bracketlevel=~varargin{1}.singletcell;
 if(len>bracketlevel)
-    if(~isa(item,'string'))
-        if(~isempty(name))
-            txt={padding0, '"', decodevarname(name,varargin{1}.unpackhex),'":[', nl}; name=''; 
-        else
-            txt={padding0, '[', nl};
-        end
+    if(~isempty(name))
+        txt={padding0, '"', decodevarname(name,varargin{1}.unpackhex),'":[', nl}; name='';
+    else
+        txt={padding0, '[', nl};
     end
 elseif(len==0)
     if(~isempty(name))
@@ -326,26 +322,17 @@ elseif(len==0)
     else
         txt={padding0, '[]'};
     end
+    txt = sprintf('%s',txt{:});
+    return;
 end
-for j=1:dim(2)
-    if(dim(1)>1)
-        txt(end+1:end+3)={padding2,'[',nl};
-    end
-    for i=1:dim(1)
-       txt{end+1}=obj2json(name,item{i,j},level+(dim(1)>1)+(len>bracketlevel),varargin{:});
-       if(i<dim(1))
-           txt(end+1:end+2)={',' nl};
-       end
-    end
-    if(dim(1)>1)
-        txt(end+1:end+3)={nl,padding2,']'};
-    end
-    if(j<dim(2))
-        txt(end+1:end+2)={',' nl};
-    end
-    %if(j==dim(2)) txt=sprintf('%s%s',txt,sprintf(',%s',nl)); end
+if(size(item,1)>1)
+    item=num2cell(item,2:ndims(item))';
 end
-if(len>bracketlevel && ~isa(item,'string'))
+idx=num2cell(1:length(item));
+sep={[',' nl],''};
+txt=[txt{:},cellfun(@(x,id) [obj2json(name,x,level+(dim(1)>1)+(len>bracketlevel),varargin{:}), sep{(id==length(item))+1}], item, idx, 'UniformOutput',false)];
+
+if(len>bracketlevel)
     txt(end+1:end+3)={nl,padding0,']'};
 end
 txt = sprintf('%s',txt{:});
@@ -718,14 +705,11 @@ if(~isvector(mat) && isnest==1)
         mat=permute(mat,ndims(mat):-1:1);
    end
    varargin{1}.num2cell_=1;
+   varargin{1}.singletcell=0;
    txt=cell2json('',num2cell(mat,1),level-1,varargin{:});
    return;
-else
-    if(isnest)
-        if(isnum2cell)
-             mat=mat(:).';
-        end
-    end
+elseif(isvector(mat) && isnum2cell==1)
+   mat=mat(:).';
 end
 
 if(size(mat,1)==1)
diff --git a/test/run_jsonlab_test.m b/test/run_jsonlab_test.m
index 4ebcc244a2bc1d6e43b2275fdfd4cafc06e1e254..e12c95af135cf2e02bbb092fc123a8921514333d 100644
--- a/test/run_jsonlab_test.m
+++ b/test/run_jsonlab_test.m
@@ -46,8 +46,8 @@ if(ismember('js',tests))
     test_jsonlab('empty string',@savejson,'','""','compact',1);
     test_jsonlab('string escape',@savejson,sprintf('jdata\n\b\ashall\tprevail\t"\"\\'),'"jdata\n\b\ashall\tprevail\t\"\"\\"');
     if(exist('isstring'))
-        test_jsonlab('string type',@savejson,string(sprintf('jdata\n\b\ashall\tprevail')),'"jdata\n\b\ashall\tprevail"','compact',1);
-        test_jsonlab('string array',@savejson,[string('jdata');string('shall');string('prevail')],'["jdata","shall","prevail"]','compact',1);
+        test_jsonlab('string type',@savejson,string(sprintf('jdata\n\b\ashall\tprevail')),'["jdata\n\b\ashall\tprevail"]','compact',1);
+        test_jsonlab('string array',@savejson,[string('jdata'),string('shall'),string('prevail')],'["jdata","shall","prevail"]','compact',1);
     end
     test_jsonlab('row vector',@savejson,[1,2,3],'[1,2,3]');
     test_jsonlab('column vector',@savejson,[1;2;3],'[[1],[2],[3]]','compact',1);
@@ -58,7 +58,7 @@ if(ismember('js',tests))
     test_jsonlab('3d (row-major) nested array',@savejson,reshape(1:(2*3*2),2,3,2),...
          '[[[1,7],[3,9],[5,11]],[[2,8],[4,10],[6,12]]]','compact',1,'nestarray',1);
     test_jsonlab('3d (column-major) nested array',@savejson,reshape(1:(2*3*2),2,3,2),...
-         '[[[1,2],[3,4],[5,6]],[[7,8],[9,10],[11,12]]]','compact',1,'nestarray',1,'formatversion',1.9);
+         '[[[1,2],[7,8]],[[3,4],[9,10]],[[5,6],[11,12]]]','compact',1,'nestarray',1,'formatversion',1.9);
     test_jsonlab('3d annotated array',@savejson,reshape(int8(1:(2*3*2)),2,3,2),...
          '{"_ArrayType_":"int8","_ArraySize_":[2,3,2],"_ArrayData_":[1,7,3,9,5,11,2,8,4,10,6,12]}','compact',1);
     test_jsonlab('complex number',@savejson,single(2+4i),...