【问题标题】:how to use PHP json_decode() function for array of JSON objects如何对 JSON 对象数组使用 PHP json_decode() 函数
【发布时间】:2020-06-28 16:42:19
【问题描述】:

我有一个 PHP 对象数组。这些对象是 json_encoded。然后我使用一个对象中的属性在 html 中显示一个表作为表中的一行。为此,我使用 for 循环一个一个地对对象进行 json_decode 并显示表格。但是在 json_decoding 之后我没有得到原始对象。我无法访问它的变量。

<?php
for ($x = 0; $x <= sizeof($objArray); $x++) {
    $obj = $objArray[$x];
    $obj = json_decode($obj);
?>
    <tr id="<?php echo $x ?>">
        <th id="obj-<?php echo $x ?>"><?php echo $obj->getName() ?></td>
        <td><?php echo $obj->getSchool() ?></td>
        <td>Pending</td>
    </tr>
<?php }
?>

我在服务器端返回对象的代码如下

$objs = //array of php objects 
$objArray =array();

foreach($objs as $values){
    array_push($objArray,json_encode($values));
}
return json_encode($objArray);

【问题讨论】:

  • json_decoded 对象将是纯数据对象,不包含任何 getMethods。
  • 纯数据对象是什么意思?我在 for 循环中循环的对象属于我声明的特定对象类型,它实现了这些 get 方法。我不能访问这些方法
  • 没有。此时它们是 stdClass 对象。 // 每行的复杂 json_encode 不会改变这一点。
  • 谢谢我理解了这个问题。因此,我返回的数组不应转换为 json 以便我正确访问方法。因此,如果我还想在 javascript 中访问这个 PHP 对象数组,是否有可以使用的方法。我一直在寻找一种从 javascript 访问这个 php 对象数组的方法

标签: php html json


【解决方案1】:

由于您使用的是json_encodejson_decode,PHP 对象将被转换为纯 json 字符串,并且与该对象有关的任何 PHP 相关信息(如 methods)都将丢失。

您可以在服务器端使用serialize 将对象转换为字符串,并为php 保留所有相关的对象信息。

在您的前端代码中,您可以使用unserialize 将字符串转换回有效的 PHP 对象。

附注: 在您的代码示例中,您的值是 json_encoding 两次。这也可能导致不必要的副作用。

【讨论】:

  • 谢谢,但如果我只使用 json_encode() 数组,我将无法在 javascript 中访问数组内的 php 对象。有没有办法让我访问 javascript 中的对象
  • 仅使用json_encode / json_decode 无法访问前端中的对象。只要在对象上使用json_encode(),方法信息就会丢失。如果您需要在后端返回 json,请使用 serialize() 和 json_encode 字符串。
猜你喜欢
  • 1970-01-01
  • 2014-04-02
  • 2011-08-24
  • 1970-01-01
  • 2022-01-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多