如何在 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?的主要内容,如果未能解决你的问题,请参考以下文章

如何在php中解码从curl产生的json文件

如何使用 PHP 解码带有注释的 JSON 文件? [复制]

如何解码json消息

如何使用 cURL 获取 JSON 数据并解码数据?

如何在PHP中解析json

如何使用 PHP 从 JSON 中提取和访问数据?