【问题标题】:json_decode returns string type instead of objectjson_decode 返回字符串类型而不是对象
【发布时间】:2026-01-19 21:55:01
【问题描述】:

我将一个 JSON 编码的字符串传递给 json_decode(),并希望它的输出是一个对象类型,但我得到的是一个字符串类型。如何返回对象?

在文档中,以下内容返回一个对象:

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

但是,如果我先json_encode()这个字符串再调用json_decode(),输出的是一个字符串而不是一个对象:

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

这只是一个简化的例子。实际上,我正在做的是通过 AJAX 将 JSON 编码的字符串推送到 PHP。然而,它确实说明了将这个编码的 JSON 字符串转换为我可以在 PHP 中读取的对象的问题,例如“$json->a”。

如何返回对象类型?

感谢您的回复! 这个问题的实际上下文是使用来自 API 的 JSON 响应。 但是,当我对此响应执行 json_decode 并尝试访问以下值时 - $json=json_decode(json response from API); 回声 $json->a 它给了我一个错误:stdClass 类的对象无法转换为字符串

【问题讨论】:

  • 为什么要对已经编码的 JSON 进行编码?前:$json = json_encode('{"a":1,"b":2,"c":3,"d":4,"e":5}'); ?
  • 你编码的是一个字符串,而不是一个对象,所以很明显你在解码时会得到一个字符串。
  • 绝对正确的穆萨!如果您传递的字符串超出了您对对象的预期?
  • 谢谢,了解我给出的示例所特有的问题。

标签: php json


【解决方案1】:

不要在 JSON 数组上写入,而是先尝试将其放入 PHP 数组。

<?php
$array = array(
'a' => 1,
'b' => 2,
'c' => 3,
'd' => 4,
'e' => 5
);
//Then json_encode()
$json = json_encode($array);
echo $json;
die;
?>

在您的情况下,您使用的是 ajax。所以当你获得成功时,你可以这样做:

$.ajax({
    url: 'example.com',
    data: {

    },
    success: function(data) {
        console.log(data);
    }
});

console.log() 中的 data 之后可以添加 json var,如 data.a、data.b...

另外,使用你提供的字符串,你不需要 json_encode,因为它已经是 json 格式了

【讨论】:

    【解决方案2】:

    函数json_encode用于将原生PHP对象或数组编码成JSON格式。

    例如,$json = json_encode($arr) 其中$arr

    $arr = array(
      'a' => 1,
      'b' => 2,
      'c' => 3,
      'd' => 4,
      'e' => 5,
    );
    

    将返回字符串$json = '{"a": 1, "b": 2, "c": 3, "d": 4, "e": 5}'。此时,您确实不需要使用json_encode 再次对其进行编码!

    要取回您的数组,只需执行json_decode($json, true)

    如果您在对 json_decode 的调用中省略了 true,您将获得一个 stdClass 的实例,该实例具有 JSON 字符串中指定的各种属性。

    更多参考请见:

    http://www.php.net/manual/en/function.json-encode.php

    http://www.php.net/manual/en/function.json-decode.php

    【讨论】:

    • 感谢您的回复!这个问题的实际上下文是使用来自 API 的 JSON 响应。但是,当我对此响应执行 json_decode 并尝试访问以下值时 - $json=json_decode(json response from API); echo $json->a 它给了我一个错误:stdClass 类的对象无法转换为字符串
    • 我明白了.. 你能告诉我们你正在使用的实际 json 响应吗?
    • 遇到了问题!它得到了双重 json_decoded 所以 var_dump 给出的是字符串而不是对象。
    【解决方案3】:
    var_dump(json_decode($json, true));
    

    http://hk.php.net/manual/en/function.json-decode.php

    【讨论】:

    • 通过 var_dump 函数检查并调试。感谢提醒这个功能:)
    最近更新 更多