From: <ha...@us...> - 2010-12-08 18:38:23
|
Revision: 8001 http://octave.svn.sourceforge.net/octave/?rev=8001&view=rev Author: hauberg Date: 2010-12-08 18:38:17 +0000 (Wed, 08 Dec 2010) Log Message: ----------- New function Added Paths: ----------- trunk/octave-forge/main/io/inst/object2json.m Added: trunk/octave-forge/main/io/inst/object2json.m =================================================================== --- trunk/octave-forge/main/io/inst/object2json.m (rev 0) +++ trunk/octave-forge/main/io/inst/object2json.m 2010-12-08 18:38:17 UTC (rev 8001) @@ -0,0 +1,137 @@ +%% Copyright (C) 2010 Torre Herrera, Daniel de +%% +%% This program is free software; you can redistribute it and/or modify +%% it under the terms of the GNU General Public License as published by +%% the Free Software Foundation; either version 2 of the License, or +%% (at your option) any later version. +%% +%% This program is distributed in the hope that it will be useful, +%% but WITHOUT ANY WARRANTY; without even the implied warranty of +%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +%% GNU General Public License for more details. +%% +%% You should have received a copy of the GNU General Public License +%% along with Octave; see the file COPYING. If not, see +%% <http://www.gnu.org/licenses/>. +%% object2json.m +%% Ultima modificacion: 2010-12-06 + +function json=object2json(object) + % function json=object2json(object) + % This function returns a valid json string that will describe object + % The string will be in a compact form (i.e. no spaces or line breaks) + % + % It will map simple octave values this way: + % function handles: string with the name of the function + % double (numbers): depends: + % If it's real it will map to a string representing that number + % If it's complex it will map to an object with the next properties: + % real: real part of the number + % imag: imaginary part of the number + % char: A string enclosed by double quotes representing that character + % And will map more complex octave values this other way: + % struct: an object with properties equal to the struct's field names + % and value equal to the json counterpart of that field + % cell: it will be mapped depending on the value of the cell (for + % example {i} will be mapped to an object with real=0 and imag=1) + % vectors or cell arrays: it will map them to a corresponding js + % array (same size) with the values transformed to their json + % counterpart (Note: that in javascript all arrays are like octave's + % cells ,i.e. they can store different type and size variables) + % strings or char vectors: they will be mapped to the same string + % enclosed by double quotes + % Other octave values will be mapped to a string enclosed by double + % quuotes with the value that the class() function returns + + s=size(object); + if(all(s==1)) + % It's not a vector so we must check how to map it + % Depending on the class of the object we must do one or another thing + switch(class(object)) + case 'function_handle' + % For a function handle we will only print the name + fun=functions(object); + json=['"',fun.function,'"']; + case 'struct' + fields=fieldnames(object); + +results=cellfun(@object2json,struct2cell(object),"UniformOutput",false); + json='{'; + if(numel(fields)>1) + sep=','; + else + sep=''; + endif + for(tmp=1:numel(fields)) + json=[json,'"',fields{tmp},'":',results{tmp},sep]; + if(tmp>=numel(fields)-1) + sep=''; + endif + endfor + json(end+1)='}'; + case 'cell' + % We dereference the cell and use it as a new value + json=object2json(object{1}); + case 'double' + if(isreal(object)) + json=num2str(object); + else + if(iscomplex(object)) + +json=['{"real":',num2str(real(object)),',"imag":',num2str(imag(object)),'}']; + endif + endif + case 'char' + % Here we handle a single char + json=['"',object,'"']; + otherwise + % We don't know what is it so we'll put the class name + json=['"',class(object),'"']; + endswitch + else + % It's a vector so it maps to an array + sep=''; + if(numel(s)>2) + json='['; + for(tmp=1:s(1)) + json=[json,sep,object2json(reshape(object(tmp,:),s(2:end)))]; + sep=','; + endfor + json(end+1)=']'; + else + % We can have three cases here: + % Object is a row -> array with all the elements + % Object is a column -> each element is an array in it's own + % Object is a 2D matrix -> separate each row + if(s(1)==1) + % Object is a row + if(ischar(object)) + % If it's a row of chars we will take it as a string + json=['"',object,'"']; + else + json='['; + for(tmp=1:s(2)) + json=[json,sep,object2json(object(1,tmp))]; + sep=','; + endfor + json(end+1)=']'; + endif + elseif(s(2)==1) + % Object is a column + json='['; + for(tmp=1:s(1)) + json=[json,'[',object2json(object(tmp,1)),']']; + endfor + json(end+1)=']'; + else + % Object is a 2D matrix + json='['; + for(tmp=1:s(1)) + json=[json,sep,object2json(object(tmp,:))]; + sep=','; + endfor + json(end+1)=']'; + endif + endif + endif +endfunction This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <prn...@us...> - 2012-03-18 22:20:48
|
Revision: 9952 http://octave.svn.sourceforge.net/octave/?rev=9952&view=rev Author: prnienhuis Date: 2012-03-18 22:20:41 +0000 (Sun, 18 Mar 2012) Log Message: ----------- Minor help text changes (get_first_help_sentence compatibility) Modified Paths: -------------- trunk/octave-forge/main/io/inst/object2json.m Modified: trunk/octave-forge/main/io/inst/object2json.m =================================================================== --- trunk/octave-forge/main/io/inst/object2json.m 2012-03-18 21:03:48 UTC (rev 9951) +++ trunk/octave-forge/main/io/inst/object2json.m 2012-03-18 22:20:41 UTC (rev 9952) @@ -22,7 +22,6 @@ function json = object2json (object) - % function json = object2json (object) % Returns a valid json string that will describe object; the string will % be in a compact form (no spaces or line breaks). % This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |