从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;
}
任何帮助表示赞赏。