解码json php时转义斜杠

从TEXT包含 JSON 对象数组的列类型(在本例中为“详细信息”列)的数据库中返回行时遇到问题。例子:


{

    productid: 1

    shopid: 1

    title: 'Product 1'

--> details: [{"name":"Brand name","value":"Brand value"},{"name":"Color","value":"blue"}]

    . . .

}

在类型列中插入数据库的数据在TEXT插入addslashes(json_encode($array_or_object))之前像安全转义一样插入。


返回数据时,TEXT按函数类型返回的列json_decode()没有问题。问题当有人试图用单一的发生'和双引号"在details。例子:


details: [{"name":"\\\"test123\\\"","value":"\\\"test\\\" \\'test\\' \\\"test \\' test \\' t\\\"est"}]

返回值如下所示:


"details": [

  {

    "name": "\\\"test123\\\"",

    "value": "\\\"test\\\" \\'test\\' \\\"test \\' test \\' t\\\"est"

  }

],

我有不止一种JSON在数据库中存储数据的方法(作为对象、对象数组、对象数组数组……),我需要一种方法来转义这些反斜杠。


使用stripslashes()使用前的字符串json_decode()不起作用,它打破了JSON。


创建一个递归函数是可行的,但并不像我希望的那样漂亮。例子:


function decode_json($json) {

    if (empty($json)) {

        return $json;

    }

    if (is_string($json)) {

        $json = json_decode($json, true);

    }

    foreach ($json as $key => $value) {

        if (is_array($value)) {

            $json[$key] = decode_json($value);

            continue;

        }

        $json[$key] = stripslashes($value);

    }

    return $json;

}

任何帮助表示赞赏。


收到一只叮咚
浏览 211回答 2
2回答
打开App,查看更多内容
随时随地看视频慕课网APP