json_decode函数不是PHP 5.1的一部分,所以我不能使用它。这个版本还有其他功能吗?
答案 0 :(得分:8)
在PHP 5.2之前,您可以使用JSON PECL extension。
实际上,它是已经集成到PHP 5.2 (quoting)中的扩展:
从PHP 5.2.0开始,JSON扩展名为 捆绑并编译成PHP 默认值。
其他一些解决方案是使用PHP开发的一些组件。
前一段时间(大约一年前),我使用了Zend_Json
component of Zend Framework和PHP 5.1。
即使Zend Framework需要PHP 5.2,也可以提取该组件(我认为它仅依赖于另一个组件 - 可能是Zend_Exception
,或类似的东西) - 和一年前,可以在PHP 5.1中使用它。
official JSON website还链接到几个基于PHP或面向PHP的组件 - 您可能希望查看该列表。
答案 1 :(得分:6)
我遇到了运行PHP 5.1.6的相同问题,但我无法在客户端的服务器上升级或安装扩展。更糟糕的是,当我需要一个解决方案时,JSON.org网站已关闭,但幸运的是,Google Code上的这个文件运行得非常好!我本来希望实际定义json_encode / json_decode,但调用fromJSON()工作得很好。
答案 2 :(得分:3)
您看到此错误,因为您的php版本早于5.2.0。这些函数在php 5.2.0及更高版本中为included by default。
PHP Fatal error: Call to undefined function json_encode()
您可以{:3}} install运行:
pecl install json
它会编译,然后将其添加到您的php.ini
文件中:(我的位于/etc/php5/apache2
)
extension=json.so
然后重启apache。
答案 3 :(得分:2)
在我的服务器中,我无法安装JSON PECL扩展,因为它导致在另一个应用程序中使用的zend_json出现问题。所以我发现这个脚本完美无缺。
jsonwrapper:早期版本的PHP 5.x的json_encode
PHP 5.2添加了json_encode
函数,它几乎可以将任何PHP数据结构转换为有效的JavaScript代码。哈希,数组,哈希数组,等等。
不幸的是,许多Linux发行版仍在使用PHP 5.1.x。
jsonwrapper实现json_encode
函数(如果它已丢失),如果它已经存在则不再使用它。 所以它很适合未来兼容。
只需添加:
require 'jsonwrapper.php';
答案 4 :(得分:0)
答案 5 :(得分:0)
<?php
if ( !function_exists('json_decode') ){
function json_decode($json)
{
// Author: walidator.info 2009
$comment = false;
$out = '$x=';
for ($i=0; $i<strlen($json); $i++)
{
if (!$comment)
{
if ($json[$i] == '{' || $json[$i] == '[') $out .= ' array(';
else if ($json[$i] == '}' || $json[$i] == ']') $out .= ')';
else if ($json[$i] == ':') $out .= '=>';
else $out .= $json[$i];
}
else $out .= $json[$i];
if ($json[$i] == '"') $comment = !$comment;
}
eval($out . ';');
return $x;
}
}
?>
这是未经测试的,我在互联网上找到了它
答案 6 :(得分:0)
我在PHP 5.1.3上遇到了Services_Json扩展的问题,所以我找到了以下库:
https://github.com/alexmuz/php-json
它属于LGPL,经过快速查看似乎没有评估输入。
答案 7 :(得分:0)
您可以使用 jsonwrapper 库...
jsonwrapper实现json_encode函数,如果它丢失了, 如果它已经存在则不管它。所以很好 未来兼容。
在此下载: jsonwrapper
仅使用:
require ("jsonwrapper.php");
$data = array('idx1' => 'foo', 'idx2' => 'bar');
echo json_encode($data);
echo json_decode($data);