我从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字符串的正确方法是什么?
答案 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响应。