1

我在数据库中有各种各样的数据,包括字符串、整数和特殊字符。我需要将其转换为 JSON 输出,我可以使用json_encode.

但是,在验证此 JSON 时,它会失败,因为某些数据包含双引号、括号等内容,这会破坏它,例如:

"description":"Allow support for "trends" and other processes"

围绕趋势的双引号打破了它。

无论如何我可以在编码之前对数组中的数据进行预处理吗?我没有编辑数据的能力,所以需要在 SQL 查询之后进行收集。

我正在按照以下方式进行操作:

    $data = array();    
    while($row = mysql_fetch_array($execute))
        {
            $data[] = array(
                "description" => $row["Descrption"],
            );
        }

然后:

print json_encode($data);

谢谢!

编辑:

var_dump:

["description"]=> string(79) "Allow support for "trends" and other processes"
4

3 回答 3

1

您确定这是您从 json_encode 收到的确切 JSON 输出吗,因为这不应该发生。一个常见的错误是直接从浏览器窗口中的页面查找 JSON 输出,其中可能已经发生了某种解析。我猜想,正因为如此,HTML 实体可能在这里发挥作用。在这种情况下,请尝试查找页面的来源(在大多数浏览器中为 CTRL+U),这应该可以让您更准确地了解您收到的内容。
未来的提示:尝试通过 JSON 查看器请求输出(我通常使用 jsonviewer.stack.hu),它可以让您更好地了解您正在处理的内容,并且几乎没有可能出错的事情.

于 2013-10-23T14:48:45.557 回答
1

json_encode应该可以解决问题,但前提是您的 PHP 版本大于 5.2。或者,在执行之前尝试转义所有 json 关键字。

function escapeJsonString($value) {
    $escapers = array("\\", "/", "\"", "\n", "\r", "\t", "\x08", "\x0c");
    $replacements = array("\\\\", "\\/", "\\\"", "\\n", "\\r", "\\t", "\\f", "\\b");
    $result = str_replace($escapers, $replacements, $value);
    return $result;
}
于 2013-10-23T14:13:03.100 回答
0

您是否尝试过应用简单的字符替换?像这样的东西:

$data[] = array(
    "description" => replace ($row["Description"], '"', '\\"'),
);

如果双引号是干扰的,那应该可以解决问题...

于 2013-10-23T13:57:45.620 回答