diff --git a/savejson.m b/savejson.m
index de6ae0cf62535d3ab322c97ec07a20de1a5cf493..3b1128238f8e25219ee6fdcf0a363379d6e9365f 100644
--- a/savejson.m
+++ b/savejson.m
@@ -496,7 +496,11 @@ else
     end
 end
 for e=1:len
-    val=escapejsonstring(item(e,:),varargin{:});
+    if(strcmp('_ArrayZipData_',decodevarname(name,varargin{1}.unpackhex))==0)
+        val=escapejsonstring(item(e,:),varargin{:});
+    else
+        val=item(e,:);
+    end
     if(len==1)
         obj=['"' decodevarname(name,varargin{1}.unpackhex) '": ' '"',val,'"'];
         if(isempty(name))
@@ -533,7 +537,8 @@ format=varargin{1}.formatversion;
 isnest=varargin{1}.nestarray;
 
 if(((isnest==0) && length(size(item))>2) || issparse(item) || ~isreal(item) || ...
-   (isempty(item) && any(size(item))) || varargin{1}.arraytostruct || (~isempty(dozip) && numel(item)>zipsize))
+   (isempty(item) && any(size(item))) || varargin{1}.arraytostruct || ...
+   (~isempty(dozip) && numel(item)>zipsize && strcmp('_ArrayZipData_',decodevarname(name,varargin{1}.unpackhex))==0))
     if(isempty(name))
     	txt=sprintf('%s{%s%s"_ArrayType_": "%s",%s%s"_ArraySize_": %s,%s',...
               padding1,nl,padding0,class(item),nl,padding0,regexprep(mat2str(size(item)),'\s+',','),nl);
@@ -750,6 +755,9 @@ end
 %%-------------------------------------------------------------------------
 function newstr=escapejsonstring(str,varargin)
 newstr=str;
+if(isempty(str) || isempty(regexp(str,'\W', 'once')))
+    return;
+end
 isoct=varargin{1}.isoctave;
 if(isoct)
    vv=sscanf(OCTAVE_VERSION,'%f');
diff --git a/saveubjson.m b/saveubjson.m
index 530e789a305dbe6a13307d9ae5f68ca7654af26f..5809078d9a8f91114128043bd14d4fee19e19299 100644
--- a/saveubjson.m
+++ b/saveubjson.m
@@ -482,7 +482,8 @@ if(ismsgpack)
     isnest=1;
 end
 if((length(size(item))>2 && isnest==0)  || issparse(item) || ~isreal(item) || ...
-       varargin{1}.arraytostruct || (~isempty(dozip) && numel(item)>zipsize))
+       varargin{1}.arraytostruct || (~isempty(dozip) && numel(item)>zipsize ...
+       && strcmp('_ArrayZipData_',decodevarname(name,varargin{:}))==0))
       cid=I_(uint32(max(size(item))),Imarker,varargin{:});
       if(isempty(name))
     	txt=[Omarker{1} N_('_ArrayType_'),S_(class(item)),N_('_ArraySize_'),I_a(size(item),cid(1),Imarker,varargin{:}) ];