将Json字符串转换为PHP对象数组时出错

将Json字符串转换为PHP对象数组时出错,php,arrays,json,object,Php,Arrays,Json,Object,我以一种将javascript本地存储转换为post请求的形式发布了一篇文章。从那里我尝试解码我的json字符串以在PHP中生成一个对象 我的php代码在回显之前的外观 $cart_items = $_POST['cart_items']; $cart_items = json_encode($cart_items); $array_test = json_decode($cart_items); print_r($array_test); 它在浏览器中返回的内

我以一种将javascript本地存储转换为post请求的形式发布了一篇文章。从那里我尝试解码我的json字符串以在PHP中生成一个对象

我的php代码在回显之前的外观

    $cart_items = $_POST['cart_items'];
    $cart_items = json_encode($cart_items);
    $array_test = json_decode($cart_items);
    print_r($array_test);
它在浏览器中返回的内容

[{\"id\":83494890,\"title\":\"2020 Hino 358\",\"partType\":\"Bumpers\",\"price\":100,\"stockNumber\":12313131312,\"thumbImg\":\"/jOIY91KhEby8_f.jpg\",\"permalink\":\"/part-description/?part=83494890\",\"maxQuantity\":1,\"requestedQuantity\":\"3\"}
,{\"id\":83493833,\"title\":\"2009 Freightliner 5020080\",\"partType\":\"ABS Modulator Valves\",\"price\":150,\"stockNumber\":\"P-1211111111157\",\"thumbImg\":\"/OOjQbsi6p8kX_f.jpg\",\"permalink\":\"/part-description/?part=83493833\",\"maxQuantity\":1,\"requestedQuantity\":\"1\"}]
我知道,当看到json数据时,通常不会到处都是前斜杠。我试图将json_解码成一个数组而不是一个对象,然后为其中的每个对象创建一个foreach。但是我得到了返回的错误“为foreach()提供的参数无效”


如何将此json字符串转换为对象数组?谢谢你

看起来
$\u POST['cart\u items']
已经包含了JSON。所以你只需要解码,而不是先编码

$array_test = json_decode($_POST['cart_items'], true);
print_r($array_test);
但是它实际上被编码了两次,这就是为什么它有转义引号,所以您需要调用
json\u decode()
两次。但是它缺少了整个事件的双引号,并且嵌入的换行符是无效的

以下工作:

<?php
  $cart_items = '"[{\"id\":83494890,\"title\":\"2020 Hino 358\",\"partType\":\"Bumpers\",\"price\":100,\"stockNumber\":12313131312,\"thumbImg\":\"/jOIY91KhEby8_f.jpg\",\"permalink\":\"/part-description/?part=83494890\",\"maxQuantity\":1,\"requestedQuantity\":\"3\"},{\"id\":83493833,\"title\":\"2009 Freightliner 5020080\",\"partType\":\"ABS Modulator Valves\",\"price\":150,\"stockNumber\":\"P-1211111111157\",\"thumbImg\":\"/OOjQbsi6p8kX_f.jpg\",\"permalink\":\"/part-description/?part=83493833\",\"maxQuantity\":1,\"requestedQuantity\":\"1\"}]"';
  $array_test = json_decode(json_decode($cart_items));
  print_r($array_test);

我遇到的问题是,当我收到$\u POST[]时,它使用了PHP的“神奇引号”,这给了我不正确的json格式。也就是说,禁用后,它会删除斜杠。

所以我一开始确实尝试过这个,但是没有json_编码就无法打印任何内容。但是,当我打印没有解码的字符串时,它仍然有斜杠,看起来非常相似。它不是有效的JSON。它周围必须有
,而且不能有换行符。@令人难以置信的是,如果它是一个JSON数组,它看起来会像
[“{\“id\”:83494890,…]
谢谢!这非常有效。我只需要获取帖子类型,在其周围添加引号,然后进行双重json_解码。我不明白发生了什么。我知道这不是我最好的代码。我认为发布输入时重新格式化了它。谢谢你为我指出了正确的方向!@Barmar-hmm。是的,传入的内容有点不对劲数据。希望OP现在能更好地处理它:在这之前,你能
var\u dump($\u POST);
并在这里分享文章中的内容吗?魔术引号已经过时多年了。你一定使用了非常旧的PHP版本。