diff --git a/savejson.m b/savejson.m
index 67f3a2bc687dbcc4df2e046e9e1449bbcb01878b..d9a178c77b2aa56007a05d444d6dee85f93e6e66 100644
--- a/savejson.m
+++ b/savejson.m
@@ -38,6 +38,12 @@ function json=savejson(rootname,obj,varargin)
 %                         numerical element will be shown without a square
 %                         bracket, unless it is the root object; if 0, square
 %                         brackets are forced for any numerical arrays.
+%        opt.ForceRootName [0|1]: when set to 1 and rootname is empty, savejson
+%                         will use the name of the passed obj variable as the 
+%                         root object name; if obj is an expression and 
+%                         does not have a name, 'root' will be used; if this 
+%                         is set to 0 and rootname is empty, the root level 
+%                         will be merged down to the lower level.
 %        opt can be replaced by a list of ('param',value) pairs. The param 
 %        string is equivallent to a field in opt.
 % output:
@@ -56,18 +62,22 @@ function json=savejson(rootname,obj,varargin)
 %
 
 varname=inputname(2);
-if(~isempty(rootname))
-   varname=rootname;
-end
+opt=varargin2struct(varargin{:});
 rootisarray=0;
 rootlevel=1;
-if((isnumeric(obj) || islogical(obj) || ischar(obj)) && isempty(rootname))
+forceroot=jsonopt('ForceRootName',0,opt);
+if((isnumeric(obj) || islogical(obj) || ischar(obj) || isstruct(obj) || iscell(obj)) && isempty(rootname) && forceroot==0)
     rootisarray=1;
     rootlevel=0;
-    varname='';
+else
+    if(isempty(rootname))
+        rootname=varname;
+    end
 end
-opt=varargin2struct(varargin{:});
-json=obj2json(varname,obj,rootlevel,opt);
+if((isstruct(obj) || iscell(obj))&& isempty(rootname) && forceroot)
+    rootname='root';
+end
+json=obj2json(rootname,obj,rootlevel,opt);
 if(rootisarray)
     json=sprintf('%s\n',json);
 else
@@ -77,8 +87,6 @@ end
 %%-------------------------------------------------------------------------
 function txt=obj2json(name,item,level,varargin)
 
-cname=class(item);
-
 if(iscell(item))
     txt=cell2json(name,item,level,varargin{:});
 elseif(isstruct(item))