From 053660a197c2cb0379b8d36f8f4ea04e2119190f Mon Sep 17 00:00:00 2001 From: robertoffmoura Date: Sun, 4 Aug 2024 15:13:11 +0100 Subject: [PATCH] Compress output of 'm2json' --- plotly/plotly_aux/m2json.m | 51 +++++++++++++++++++++++--------------- 1 file changed, 31 insertions(+), 20 deletions(-) diff --git a/plotly/plotly_aux/m2json.m b/plotly/plotly_aux/m2json.m index d99ad058..d17eb2e1 100644 --- a/plotly/plotly_aux/m2json.m +++ b/plotly/plotly_aux/m2json.m @@ -3,49 +3,60 @@ valstr = struct2json(val); elseif iscell(val) valstr = cell2json(val); - elseif isa(val, 'numeric') + elseif isa(val, "numeric") sz = size(val); + if isa(val,"single") + precision = "7"; + else + precision = "15"; + end + fmt = "%." + precision + "g,"; if length(find(sz>1))>1 % 2D or higher array - valstr = ''; + valstr = ""; for i = 1:sz(1) - valsubstr = [sprintf('%.15g, ', val(i,:))]; - valsubstr = valsubstr(1:(end-2)); - valstr = [valstr ', [' valsubstr ']']; + valsubstr = sprintf(fmt, val(i,:)); + valsubstr = valsubstr(1:(end-1)); + valstr = valstr + ", [" + valsubstr + "]"; end valstr = valstr(3:end); % trail leading commas else - valstr = [sprintf('%.15g, ', val)]; - valstr = valstr(1:(end-2)); + valstr = [sprintf(fmt, val)]; + valstr = valstr(1:(end-1)); end if length(val)>1 - valstr = ['[' valstr ']']; - elseif length(val) == 0 - valstr = '[]'; + valstr = "[" + valstr + "]"; + elseif isempty(val) + valstr = "[]"; end - valstr = strrep(valstr,'-Inf', 'null'); - valstr = strrep(valstr, 'Inf', 'null'); - valstr = strrep(valstr, 'NaN', 'null'); + valstr = strrep(valstr,"-Inf", "null"); + valstr = strrep(valstr, "Inf", "null"); + valstr = strrep(valstr, "NaN", "null"); elseif ischar(val) [r, ~] = size(val); % We can't use checkescape() if we have ['abc'; 'xyz'] if r > 1 valstr = cell2json(cellstr(val)); else - val = checkescape(val); %add escape characters - valstr = ['"' val '"']; + val = checkescape(val); % add escape characters + valstr = sprintf('"%s"', val); end elseif islogical(val) if val - valstr = 'true'; + valstr = "true"; else - valstr = 'false'; + valstr = "false"; end elseif isdatetime(val) valstr = m2json(convertDate(val)); elseif isstring(val) - fh = ifel(isscalar(val),@char,@cellstr); + if isscalar(val) + fh = @char; + else + fh = @cellstr; + end valstr = m2json(fh(val)); else - valstr = ''; % wtf is it? - warning("Failed to m2json encode class of type: %s",class(val)); + valstr = ""; + warning("Failed to m2json encode class of type: %s", class(val)); end +end