如何在 PHP 5.1 中解码 json?
Posted
技术标签:
【中文标题】如何在 PHP 5.1 中解码 json?【英文标题】:How can I decode json in PHP 5.1? 【发布时间】:2011-01-23 04:19:05 【问题描述】:json_decode 函数不是 php 5.1 的一部分,所以我不能使用它。这个版本还有其他功能吗?
【问题讨论】:
【参考方案1】:在 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 的组件——您可能想查看该列表。
【讨论】:
Thanx,我该如何安装它,它没有关于它的文档,它只链接到说不需要安装它的 php 站点,因为它是 php 的一部分 lol 安装 PECL 扩展,至少在 Linux 系统上,通常非常简单:pecl install json
;请注意,您可能需要分发版中的一些“开发”包;;;看看php.net/manual/en/install.pecl.php 可能也很有趣
如果您需要更改默认的php5-json,请尝试Package php5-json breaks firephp。【参考方案2】:
我在运行 PHP 5.1.6 时遇到了同样的问题,但我无法在我的客户端服务器上升级或安装扩展。更糟糕的是,当我需要解决方案时,JSON.org 网站已关闭,但幸运的是,Google Code 上的这个文件运行良好!我更愿意实际定义 json_encode/json_decode,但调用 fromJSON() 就可以了。
http://code.google.com/p/simplejson-php/
【讨论】:
感谢您的推荐。公平地说,我不能责怪 simplejson.php 的作者以不同的方式命名他的函数,因为它们的签名与内置函数的签名不匹配。但是,我可以责备他eval()
构造了 JSON 字符串!【参考方案3】:
您看到此错误是因为您的 php 版本早于 5.2.0。这些函数在 php 5.2.0 及更高版本中为 included by default。
PHP Fatal error: Call to undefined function json_encode()
你可以通过运行installPECL extension:
pecl install json
它将编译,然后将其添加到您的 php.ini
文件中:(我的在 /etc/php5/apache2
中)
extension=json.so
然后重启apache。
【讨论】:
【参考方案4】:在我的服务器中,我无法安装 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';
http://www.boutell.com/scripts/jsonwrapper.html
【讨论】:
【参考方案5】:Zend 框架有 Zend_Json。至少几年前是这样的。
http://framework.zend.com/download
您可以直接提取 JSON 库并以独立方式使用它。
【讨论】:
不知道为什么-1'd我这样做。虽然这可能不如 PECL 解决方案好,但它仍然是一个有效的选择。【参考方案6】:代码
<?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;
?>
警告
这是未经测试的,我在互联网上找到的
链接
http://www.php.net/manual/en/function.json-decode.php#91216
【讨论】:
这段代码可以被利用。 drupal.org/node/2113317drupalcode.org/project/context.git/commitdiff/…【参考方案7】:我在 PHP 5.1.3 上遇到了 Services_Json 扩展的问题,所以我找到了以下库:
https://github.com/alexmuz/php-json
它在 LGPL 下,快速查看后似乎没有 eval 输入。
【讨论】:
后来我发现 Services_Json 工作得很好,问题是服务器上的魔术引号,这弄乱了 POST 发送的 JSON 字符串。【参考方案8】:您可以使用 jsonwrapper 库...
jsonwrapper 如果缺少 json_encode 函数,则实现它,并且 如果它已经存在,则不要理会它。所以很好 未来兼容。
在此处下载: jsonwrapper
使用只是做:
require ("jsonwrapper.php");
$data = array('idx1' => 'foo', 'idx2' => 'bar');
echo json_encode($data);
echo json_decode($data);
【讨论】:
以上是关于如何在 PHP 5.1 中解码 json?的主要内容,如果未能解决你的问题,请参考以下文章