【问题标题】:Why is there json_decode($array, TRUE)?为什么会有 json_decode($array, TRUE)?
【发布时间】:2015-05-24 15:19:55
【问题描述】:

我将字典作为 JSON 发送到服务器。字典只包含 1 个键,即一个项目数组:

header('Content-type: application/json');

$request = json_decode(file_get_contents('php://input'));

$array = json_decode($request['array']);

键'array'的值是一个数组,不能是一个对象。

所以,基本上这两个方法会返回相同的东西:

$array = json_decode($request['array']);

$array = json_decode($request['array'], TRUE);

我说的对吗?

此方法的唯一用途是当您要将对象转换为数组时:

$array = json_decode($request['object'], TRUE);

你为什么要这样做?

我的意思是,我确实知道这可能有应用程序,但另一方面,我花了一整天的时间来消化这种思维方式,但我仍然觉得思维上有很大的差距。

这种小小的便利与解析数据的具体方式相混淆,只会让像我这样的新手感到困惑。

【问题讨论】:

  • 嗯,在许多情况下,使用关联数组比使用标准类对象更容易,这就是原因。
  • 如果使用关联数组更容易,那么......你为什么要首先发送一个对象???
  • 您发送的不是对象,而是 JSON 格式的字符串。如何在服务器上解析 JSON 取决于您,一般而言,关联数组通常比标准类对象更易于使用。
  • 如果它通常更容易为什么不是默认方法?为什么默认方法通常更难?你明白我在说什么吗?为什么我认为这是不一致的?
  • 我想这取决于,对象并不是真的很难使用,但在 PHP 中大多数时候你会使用关联数组,比如你创建的超全局变量或数据结构等。有时你会创建对象和对象都很好,只是有点不同。要将简单的 JSON 结构转换为可用的东西,通常更熟悉的是获取数组而不是对象,但也许您应该改为阅读关联数组和 stdClass 对象之间的区别

标签: php arrays json


【解决方案1】:

Javascript/JSON 中的数组对象 之间有明显的区别。数组没有显式索引,但有数字索引,而对象未排序并具有命名属性。默认情况下,json_decode 尊重这种差异,并将 JSON 数组解码为 PHP 数组,将 JSON 对象解码为 PHP 对象(stdClass 的实例)。

然而,PHP 的数组恰好支持关联索引;因此 JSON 对象可以解码为 PHP 对象 PHP 数组。您可以使用第二个参数选择您喜欢的json_decode。这两种不同语言之间没有 100% 清晰的 1:1 映射,因此有一个偏好。

【讨论】:

    【解决方案2】:

    为什么是真的,你可以理解,,见下面的代码。

    <?php
    $json = '{"a":1,"b":2,"c":3,"d":4,"e":5}';
    
    var_dump(json_decode($json));
    var_dump(json_decode($json, true));
    
    ?>
    

    输出将是上述代码:

    object(stdClass)#1 (5) {
        ["a"] => int(1)
        ["b"] => int(2)
        ["c"] => int(3)
        ["d"] => int(4)
        ["e"] => int(5)
    }
    
    array(5) {
        ["a"] => int(1)
        ["b"] => int(2)
        ["c"] => int(3)
        ["d"] => int(4)
        ["e"] => int(5)
    }
    

    【讨论】:

    • err,您实际上并没有在这里解释任何内容 - 您只是说明了 OP 已经说明的内容。
    【解决方案3】:

    如果你使用true,我将以数组格式显示,如果你不使用,它将显示在

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-05-16
      • 1970-01-01
      • 2015-01-16
      • 1970-01-01
      • 1970-01-01
      • 2018-11-11
      • 2016-05-31
      相关资源
      最近更新 更多