【问题标题】:How can I decode json in PHP 5.1?如何在 PHP 5.1 中解码 json?
【发布时间】:2025-11-27 03:20:04
【问题描述】:

json_decode 函数不是 PHP 5.1 的一部分,所以我不能使用它。这个版本还有其他功能吗?

【问题讨论】:

    标签: php json parsing


    【解决方案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

        【讨论】:

        【解决方案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);
        

        【讨论】: