首页 > 解决方案 > 如何在 PHP 中从 json_encode() 中去掉 \\" 和 \\""

问题描述

我有一个简单的问题:

我的 JSON 包含以下内容,我将 4500 行精简为几行以表明观点:

{ "status": 200, "statusText": "Success", "result": [ { "id": 44281, "title": "100% Sankey by Richard Kaufman - Book", "qty": 11, "price": "42.0000" }, { "id": 47809, "title": "10 Exact Cuts (BLUE) Henry Evans", "qty": 4, "price": "45.0000" }, { "id": 37650, "title": "10 Exact Cuts (RED) Henry Evans", "qty": 12, "price": "45.0000" }, 

...

到问题开始的地方

      {
         "id":50104,
         "title":"System 6 - 6 by Six by Michael \\""Six\\"" Muldoon",
         "qty":5,
         "price":"30.0000"
      },
      {
         "id":67993,
         "title":"Acro Index Dry Erase 3\\"X5\\" (Online Instructions) by Blake Vogt - Trick",
         "qty":17,
         "price":"49.9500"
      },
      {
         "id":70741,
         "title":"Acro Index Dry Erase Large 5\\"x8\\"(Online Instructions) by Blake Vogt - Trick",
         "qty":113,
         "price":"99.9500"
      },
   ]
}

好的,您可以看到我遇到的唯一问题是从我正在使用的 JSON 中删除 \\" 和 \\"" :

    if (!empty($result->items->InventoryItem)) {
        // echo "Items added between " . str_replace('T', ' ', $starttime) . " and " . str_replace('T', ' ', $endtime) . "<p></p><ul>";
        foreach ($result->items->InventoryItem as $item) {
            // echo "<li><a href='https://www.somedomain.com/product.aspx?id=" . $item->InternalId . "' target='_blank'>$item->Title</a></li>";
            
            $id = $item->InternalId;
            $title = $item->Title;
            $qty = $item->QuantityAvailable;
            $price = $item->SuggestedRetailPrice;

            // get rid of \\" and then \\""

            $title = str_replace('5\\"x8\\"', '5x8', $title);
            $title = str_replace('\\\\""Six\\\\""', 'Six', $title);
            $title = str_replace('3\\\\"X5\\\\"', '3x5', $title);
            
            stripslashes($title);
            
            $return_arr[] = array(
                "id" => $id,
                "title" => $title,
                "qty" => $qty,
                "price" => $price
            );

        }

        $return_obj = array (
            "status" => 200,
            "statusText" => "Success",
            "result" => $return_arr
        );

        // echo "</ul>";
        echo var_export(json_encode($return_obj, JSON_PRETTY_PRINT));

    } else {
        echo "No items found";
    }

上面的 JSON 是我返回并在线放入 JSONFormatter 的内容。 转义字符的格式问题

我真的想用 'Six' 替换 \\""Six\\"",用 3"x5" 或只是 3x5 替换 3\\"X5\\",用 5x8 或 5" 替换 5\\"x8\\" x8" 因为我不需要转义字符。我知道我可以在 JavaScript 中做到这一点,但是为什么,当 PHP 是我的重担时。

更新和解决方案 这是在下面每个人的帮助下完美运行的方法。谢谢你。

    if (!empty($result->items->InventoryItem)) {
        // echo "Items added between " . str_replace('T', ' ', $starttime) . " and " . str_replace('T', ' ', $endtime) . "<p></p><ul>";
        foreach ($result->items->InventoryItem as $item) {
            // echo "<li><a href='https://www.murphysmagic.com/product.aspx?id=" . $item->InternalId . "' target='_blank'>$item->Title</a></li>";
            
            $id = $item->InternalId;
            $title = $item->Title;
            $qty = $item->QuantityAvailable;
            $price = $item->SuggestedRetailPrice;

            // get rid of \\" and then \\""

            $title = str_replace('5\\"x8\\"', '5x8', $title);
            $title = str_replace('\\\\""Six\\\\""', 'Six', $title);
            $title = str_replace('3\\\\"X5\\\\"', '3x5', $title);
            
            stripslashes($title);
            
            $return_arr[] = array(
                "id" => $id,
                "title" => $title,
                "qty" => $qty,
                "price" => $price
            );

        }
        **// UPDATED to reflect what's below.**
        $return_arr[] = array(
            "status" => 200,
            "statusText" => "Success",
            [
                "result" => $return_arr
            ]
        );

        // echo "</ul>";
        echo json_encode($return_arr, JSON_PRETTY_PRINT);

    } else {
        echo "No items found";
    }

第二次更新:快点!

所以,我的 JSON 又回来了,但是,正如你所看到的,我希望 STATUS 和 STATUSTEXT 在结果 [0-99] 之前位于顶部,而不像你在这里看到的那样。

为了清楚起见,这里是 PHP 中更新的 ARRAY:

        **// UPDATED to reflect what's below.**
        $return_arr[] = array(
            "status" => 200,
            "statusText" => "Success",
            [
                "result" => $return_arr
            ]
        );

最后和最终解决方案更新

我知道了!

        $obj = (object) [
            "status" => 200,
            "statusText" => "Success",
            "result" => $return_arr
        ];

       echo json_encode($obj, JSON_PRETTY_PRINT);

JSON 进入 AJAX 的 JS 文件

标签: javascriptphpjquery

解决方案


这是解决方案:

    if (!empty($result->items->InventoryItem)) {
        // echo "Items added between " . str_replace('T', ' ', $starttime) . " and " . str_replace('T', ' ', $endtime) . "<p></p><ul>";
        foreach ($result->items->InventoryItem as $item) {
            // echo "<li><a href='https://www.somedomain.com/product.aspx?id=" . $item->InternalId . "' target='_blank'>$item->Title</a></li>";

            $id = $item->InternalId;
            $title = $item->Title;
            $qty = $item->QuantityAvailable;
            $price = $item->SuggestedRetailPrice;

            // get rid of \\" and then \\""

            $title = str_replace('5\\"x8\\"', '5x8', $title);
            $title = str_replace('\\\\""Six\\\\""', 'Six', $title);
            $title = str_replace('3\\\\"X5\\\\"', '3x5', $title);

            stripslashes($title);

            $return_arr[] = array(
                "id" => $id,
                "title" => $title,
                "qty" => $qty,
                "price" => $price
            );
        }
        **// THIS DID IT!**
        $obj = (object) [
            "status" => 200,
            "statusText" => "Success",
            "result" => $return_arr
        ];

        echo json_encode($obj, JSON_PRETTY_PRINT);
    } else {
        echo "No items found";
    }

这就是结果的样子

在此处输入图像描述


推荐阅读