[evolvis-commits] r17192: make minijson encoder feature-complete by adding floats *shudder*

mirabilos at evolvis.org mirabilos at evolvis.org
Wed Apr 13 14:33:01 CEST 2011


Author: mirabilos
Date: 2011-04-13 14:33:00 +0200 (Wed, 13 Apr 2011)
New Revision: 17192

Modified:
   trunk/gforge_base/evolvisforge/gforge/common/include/minijson.php
Log:
make minijson encoder feature-complete by adding floats *shudder*


Modified: trunk/gforge_base/evolvisforge/gforge/common/include/minijson.php
===================================================================
--- trunk/gforge_base/evolvisforge/gforge/common/include/minijson.php	2011-04-13 12:32:59 UTC (rev 17191)
+++ trunk/gforge_base/evolvisforge/gforge/common/include/minijson.php	2011-04-13 12:33:00 UTC (rev 17192)
@@ -2,7 +2,7 @@
 /**
  * Minimal JSON generator for FusionForge
  *
- * Copyright © 2010
+ * Copyright © 2010, 2011
  *	Thorsten “mirabilos” Glaser <t.glaser at tarent.de>
  * All rights reserved.
  *
@@ -21,8 +21,7 @@
  * with FusionForge; if not, write to the Free Software Foundation, Inc.,
  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
  *-
- * Do *not* use PHP’s json_encode because it is broken. Rather,
- * use (and, if necessary, extend) this module.
+ * Do *not* use PHP’s json_encode because it is broken.
  */
 
 /*-
@@ -52,7 +51,18 @@
 			return $z;
 		$x = (string)$x;
 	}
-	/* note: no float here (for now); be locales-aware! */
+	if (is_float($x)) {
+		$rs = sprintf("%.14E", $x);
+		$v = explode("E", $rs);
+		$rs = rtrim($v[0], "0");
+		if (substr($rs, -1) == ".") {
+			$rs .= "0";
+		}
+		if ($v[1] != "-0" && $v[1] != "+0") {
+			$rs .= "E" . $v[1];
+		}
+		return $rs;
+	}
 	if (is_string($x)) {
 		$rs = "\"";
 		foreach (str_split($x) as $v) {



More information about the evolvis-commits mailing list