【问题标题】:Error converting Json string to array of objects PHP将 Json 字符串转换为 PHP 对象数组时出错
【发布时间】:2020-12-19 19:12:23
【问题描述】:

我以将我的 javascript localstorage 转换为发布请求的形式发布了帖子。从那里我尝试解码我​​的 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_decode成一个数组而不是一个对象,然后为里面的每个对象创建一个foreach。但我收到此错误返回“为 foreach() 提供的参数无效

如何使这个 json 字符串转换为对象数组?谢谢

【问题讨论】:

  • 您能在此之前var_dump($_POST); 并在这里分享 POST 的内容吗?

标签: php arrays json object


【解决方案1】:

看起来$_POST['cart_items'] 已经包含 JSON。所以你只需要解码它,而不是先编码它。

$array_test = json_decode($_POST['cart_items'], true);
print_r($array_test);

但它实际上被编码了两次,这就是它转义引号的原因,所以你需要调用json_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);

我建议你找到发送cart_item POST 参数的代码并修复它,这样它就不会执行所有这些额外的编码。

【讨论】:

  • 所以我一开始确实尝试过这个,但是没有 json_encode 什么都不会打印。但是,当我打印没有解码的字符串时,它仍然有斜线并且看起来非常相似。
  • 它不是有效的 JSON。周围必须有",并且不能有换行符。
  • @IncredibleHat 如果它是一个 JSON 数组,它看起来像 ["{\"id\":83494890,...]
  • 谢谢!这很好用。我只需要获取帖子类型,在其周围添加引号,然后执行双 json_decode。我不明白发生了什么。我知道这不是我最好的代码。我认为发布输入会重新格式化它。感谢您指引我朝着正确的方向前进!
  • @Barmar 嗯。是的,传入的数据有问题。希望 OP 现在可以弄清楚这一点,因为他们对此有了更好的处理:D
【解决方案2】:

我遇到的问题是,当我获得 $_POST[] 时,它使用了 PHP 的“魔术引号”,这给我的 json 格式提供了不正确的格式。话虽如此,禁用此功能后,它会删除斜杠。

【讨论】:

  • 魔术引号已经过时多年了。您必须使用非常旧的 PHP 版本。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-29
  • 1970-01-01
  • 2016-06-03
  • 2012-05-08
  • 2013-07-14
相关资源
最近更新 更多