【问题标题】:PHP json handler compatible with older php versions与旧 php 版本兼容的 PHP json 处理程序
【发布时间】:2010-02-23 15:34:56
【问题描述】:

是否有一个通用的 PHP JSON 库可以检测您的 PHP 版本中的 JSON 支持级别,并在未找到本机支持时调用外部提供的 JSON 库? ...或者,我会花时间自己写这篇文章吗?

【问题讨论】:

    标签: php json


    【解决方案1】:

    Facebook 在其 PHP 库中包含一个。希望他们不会介意你借用它:

    http://svn.facebook.com/svnroot/platform/clients/php/trunk/jsonwrapper/

    【讨论】:

      【解决方案2】:

      我不知道那里有一个完整的图书馆,但我相信稍作研究可能会找到一个。但是,这里有一个 json_encode 替代品,对我很有帮助。

      /**
           * json_encode2()
           * 
           * @access public
           * @param bool $a
           * @return string
           */
          public function json_encode2($a=false) {
              if (is_null($a)) return 'null';
              if ($a === false) return 'false';
              if ($a === true) return 'true';
              if (is_scalar($a))
              {
                if (is_float($a))
                {
                  // Always use "." for floats.
                  return floatval(str_replace(",", ".", strval($a)));
                }
      
                if (is_string($a))
                {
                  static $jsonReplaces = array(array("\\", "/", "\n", "\t", "\r", "\b", "\f", '"'), array('\\\\', '\\/', '\\n', '\\t', '\\r', '\\b', '\\f', '\"'));
                  return '"' . str_replace($jsonReplaces[0], $jsonReplaces[1], $a) . '"';
                }
                else
                  return $a;
              }
              $isList = true;
              for ($i = 0, reset($a); $i < count($a); $i++, next($a))
              {
                if (key($a) !== $i)
                {
                  $isList = false;
                  break;
                }
              }
              $result = array();
              if ($isList)
              {
                foreach ($a as $v) $result[] = $this->json_encode2($v);
                return '[' . join(',', $result) . ']';
              }
              else
              {
                foreach ($a as $k => $v) $result[] = $this->json_encode2($k).':'.$this->json_encode2($v);
                return '{' . join(',', $result) . '}';
              }
          }
      

      【讨论】:

      • 在方法声明中将其设为“public”而不是“public”。
      • 正如 Pekka 所说,我会将这个函数包装在 if(!function_exists("json_encode")) 中,然后调用这个替换函数 json_encode()。这样,您就不必担心是否应该打电话给json_encode()json_encode2()
      【解决方案3】:

      我认为这很简单,PHP

      您也可以检查function_exists("json_decode")

      JSON 函数的用户贡献注释有一些解决方法实现,例如here 用于编码部分。不过,我不知道它们有多可靠。

      【讨论】:

        【解决方案4】:

        我用过这个:

        $data = array();
        $q = mysql_query("SELECT * FROM blah");
        while ($r = mysql_fetch_array($q, MYSQL_ASSOC)) {
            foreach ($r as $value) $data[] = '"' . addslashes($value) . '"';
        }
        
        echo '['.implode(', ', $data).']';
        

        返回与调用 json_encode 相同的结果

        【讨论】:

        • 除了最简单的情况外,这不太可能表现得像 json_encode。
        猜你喜欢
        • 2017-04-23
        • 1970-01-01
        • 2015-12-27
        • 1970-01-01
        • 1970-01-01
        • 2020-11-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多