diff --git a/savejson.m b/savejson.m
index 422890fcbd286150f9f312c17e34c6b6b2dc57c4..25d9f490f040316d932e8a82b1995adc9d22b41c 100644
--- a/savejson.m
+++ b/savejson.m
@@ -173,8 +173,12 @@ elseif(ischar(item))
     txt=str2json(name,item,level,varargin{:});
 elseif(isa(item,'string'))
     txt=str2json(name,item{:},level,varargin{:});
-elseif(isobject(item)) 
-    txt=matlabobject2json(name,item,level,varargin{:});
+elseif(isobject(item))
+    if(~exist('OCTAVE_VERSION','builtin') && istable(item))
+        txt=matlabtable2json(name,item,level,varargin{:});
+    else
+        txt=matlabobject2json(name,item,level,varargin{:});
+    end
 else
     txt=mat2json(name,item,level,varargin{:});
 end
@@ -434,8 +438,13 @@ txt=sprintf('%s%s%s',txt,padding1,'}');
 
 %%-------------------------------------------------------------------------
 function txt=matlabobject2json(name,item,level,varargin)
-st = struct();
-if numel(item) > 0 %non-empty object
+if numel(item) == 0 %empty object
+    st = struct();
+elseif numel(item) == 1 %
+    st = struct();
+    txt = str2json(name, char(item), level, varargin(:));
+    return
+else
     % "st = struct(item);" would produce an inmutable warning, because it
     % make the protected and private properties visible. Instead we get the
     % visible properties
@@ -448,6 +457,33 @@ if numel(item) > 0 %non-empty object
 end
 txt=struct2json(name,st,level,varargin{:});
 
+%%-------------------------------------------------------------------------
+function txt=matlabtable2json(name,item,level,varargin)
+if numel(item) == 0 %empty object
+    st = struct();
+else
+    % "st = struct(item);" would produce an inmutable warning, because it
+    % make the protected and private properties visible. Instead we get the
+    % visible properties
+    st = struct();
+    propertynames = properties(item);
+    if(isfield(item.Properties,'RowNames') && ~isempty(item.Properties.RowNames))
+        rownames=item.Properties.RowNames;
+        for p = 1:(numel(propertynames)-1)
+            for j = 1:size(item(:,p),1)
+                st.(rownames{j}).(propertynames{p}) = item{j,p};
+            end
+        end
+    else
+        for p = 1:(numel(propertynames)-1)
+            for j = 1:size(item(:,p),1)
+                st(j).(propertynames{p}) = item{j,p};
+            end
+        end
+    end
+end
+txt=struct2json(name,st,level,varargin{:});
+
 %%-------------------------------------------------------------------------
 function txt=matdata2json(mat,level,varargin)