5

互联网对此没有帮助。我们在 ColdFusion 中使用编码数据serializeJSON并尝试在 PHP 中使用json_decode. 大多数情况下,这工作正常,但在某些情况下,json_decode返回NULL。我们已经寻找了明显的罪魁祸首,但serializeJSON似乎正在按预期格式化事情。还有什么问题?

更新:有几个人(明智地)要求我发布导致问题的输出。我会,除了我们刚刚发现结果集是我们所有的数据(列出 2300 多个出租物业的信息,总共 565,135 个 ASCII 字符)!这可能是个问题,尽管我在 PHP 文档中没有看到任何关于字符串最大大小的内容。那里的限制因素是什么?内存?

更新二:问题似乎是我们的几个用户复制并粘贴了带有“智能”引号的 Microsoft Word 文本。那些讨厌的用户...

4

4 回答 4

2

您可以尝试在 UTF-8 中运行,并让 PHP 知道这一事实。

我遇到了一个问题,PHPjson_decode无法解码 UTF-8 JSON 字符串(除了你所拥有的大括号之外,还有一些“奇怪”的字符)。我的解决方案是通过在提交给 PHP 的 HTML 页面中插入一个 Content-Type 元标记来提示 PHP 我在 UTF-8 模式下工作。这样,提交数据的内容类型,即 JSON 字符串,也将是 UTF-8:

<meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>

之后,PHPjson_decode能够正确解码字符串。

于 2008-10-05T04:59:59.687 回答
1

你能可靠地复制这个问题吗?如果是这样,您可以发布返回 null 的示例数据吗?我相信你知道这一点,但为了其他可能不知道的人的信息,RFC 4627描述了 JSON,假设有效的 javascript 是有效的 JSON 是一个常见的错误。最好将 JSON 视为 javascript 的子集。

回应编辑:

我建议检查以确保您的信息已填充到您的 PHP 脚本中(在它被传递给 json_decode 之前),并验证该信息(特别是如果您可以可靠地重现错误)。为方便起见,您可以尝试使用在线验证器。基于非常有限的信息,听起来可能是超时而不是获取所有数据?需要这么大的数据集吗?

于 2008-10-01T01:55:16.197 回答
1

我遇到了这个确切的问题,事实证明这是由于 ColdFusion 将不可打印的字符放入 JSON 数据包(这些字符确实存在于我们的数据中),但它们无法进入 JSON。

这个站点上的两个问题为我解决了这个问题,尽管我选择了 PHP 解决方案而不是 ColdFusion 解决方案,因为我觉得它是两者中更优雅的一个。

PHP解决方案

在将字符串传递给 json_decode() 之前修复字符串

$string = preg_replace('/[\x00-\x1F\x80-\xFF]/', '', $string);

ColdFusion 解决方案

使用 serializeJSON() 后,在该 SO 问题中使用 cleanXmlString() 函数

于 2009-07-26T09:31:15.650 回答
0

你可以尝试用另一个解析器解析它,然后寻找错误——我知道 Python 的 JSON 解析器质量非常高。如果您安装了 Python,则可以很容易地通过demjson的语法检查器运行文本。如果它是一个非常大的数据集,你可以使用我的库jsonlib——内存使用会比 demjson 更高,但它会运行得更快,因为它是用 C 编写的。

于 2008-10-01T02:21:29.740 回答