8

我将一个 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); echo $json->a 它给了我一个错误:stdClass 类的对象无法转换为字符串

4

3 回答 3

6

该函数json_encode用于以 JSON 格式对原生 PHP 对象或数组进行编码。

例如,在$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).

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

如需更多参考,请参阅:

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

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

于 2012-08-31T06:49:37.637 回答
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()中的数据之后可以添加json var,如data.a,data.b ...

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

于 2012-08-31T07:05:13.470 回答
0
var_dump(json_decode($json, true));

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

于 2012-08-31T06:48:23.127 回答