-1

我从 Node JS 服务返回以下 JSON 字符串:

"{\"success\":true,\"isavailable\":true}"

当我尝试在 PHP 中使用 json_decode() 时,我在 var_dump 上得到以下信息:

string '{"success":true,"isavailable":true}' (length=35)

所以,我开始做以下事情:

$str = str_replace("\"{", "'{", $str);
$str = str_replace("}\"", "}'", $str);
$str = str_replace('\"','"',$str);

当我这样做时,我从返回最后一个错误和一个 NULL 值中得到一个语法错误。

那么,在 PHP 中解析这个 JSON 字符串的正确方法是什么?

4

5 回答 5

1
$obj = json_decode("{\"success\":true,\"isavailable\":true}");
echo $obj->success;
echo $obj->isavailable;

结果:

11

这里1代表true(您的 json 中的实际值),例如真实值。

您可以在这个工作示例中看到一个演示。

于 2012-07-05T19:02:11.530 回答
1

正确的解决方案(假设输入正是 OP 中的内容)是用于trim()在调用后摆脱前导和尾随双引号stripslashes()

$str = '"{\"success\":true,\"isavailable\":true}"';
$str = trim( stripslashes( $str), '"');
var_dump( json_decode( $str));

现在,你得到

object(stdClass)#1 (2) { ["success"]=> bool(true) ["isavailable"]=> bool(true) }

我还确认该字符串似乎是双重编码的,因此它也可以正确解码:

$str = '"{\"success\":true,\"isavailable\":true}"';
var_dump( json_decode( json_decode( $str)));
于 2012-07-05T19:03:21.160 回答
0

采用

json_decode(stripslashes($json_string));
于 2012-07-05T19:01:22.407 回答
0

您的输入无效,假设:

$this = '"{\"success\":true,\"isavailable\":true}"';

是你真正拥有的。

所以这不是真正的 json_decode 问题,而是斜杠和尾随引号。

您可以通过替换或修剪来修复它,就像上面提到的那样。

$obj = json_decode(trim(stripslashes('"{\"success\":true,\"isavailable\":true}\"'), '"'));

要访问它,只需执行以下操作:

$obj->success 

$obj->isavailable

你会得到 1 因为 true 是一个布尔值。

但就个人而言,您应该考虑转义响应,以避免这些对 JSON 字符串的“黑客攻击”。斜线和引号之类的东西不应该不转义地发送。

当然,如果这是您自己的 JSON 响应。

于 2012-07-05T19:15:13.797 回答
-1

$parsed = json_decode($whatever);

于 2012-07-05T19:00:27.773 回答