在PHP中解析JSON的正确方法是什么?

时间:2012-07-05 18:58:51

标签: php json

我从Node JS Service返回以下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字符串的正确方法是什么?

5 个答案:

答案 0 :(得分:1)

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

<强>结果:

11

此处1代表true(json中的实际值),例如真值。

您可以在此working example中看到演示。

答案 1 :(得分:1)

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

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

现在,you get

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

我还确认此字符串似乎是双重编码的,所以它也可以通过以下方式正确解码:

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

答案 2 :(得分:0)

$parsed = json_decode($whatever);

答案 3 :(得分:0)

使用

json_decode(stripslashes($json_string));

答案 4 :(得分: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响应。