0

我正在尝试发送一个复杂的数据结构,该结构由具有数组的对象组成,该数组具有具有对象的数组,具有具有可能指向第一个对象的数组的对象,等等...我收到此错误:TypeError: Converting circular structure to JSON which我完全理解为什么会这样。

我试图避免扁平化结构,因为它的处理成本太高,所以我想知道在发送我的 http 请求(将其发送到 PHP 页面)时是否有任何其他方法可以简单地忽略此错误?

4

2 回答 2

1

没有。JSON 基本上是 JS 赋值操作的右侧。您不能在一行中构建自引用的 JS 结构,例如:

var x = {y : x };

x在左侧实际创建之前,将简单地在右侧使用“未定义”错误。

如果你不能用一行 JavaScript 来表达某些东西,那么你就不能用 JSON 来表达它。

于 2013-08-09T18:21:41.757 回答
1

您必须在某处拆分该圆形结构。

从 PHP 5.4 开始,有一个JsonSerializable可用的接口允许对象在被json_encode().

因此,您也许可以将其添加到您的引用对象中,以便仅在第一次被要求时返回子对象。或者更好的是,使那些引用该对象的对象不返回它,而是返回所有其他对象。

您可以尝试将该接口反向移植到 PHP 的早期版本,但您不仅需要该接口(这很简单),还需要一个替代函数来json_encode()检测接口的存在并执行所有处理工作。

您还可以尝试->toJson()在对象中实现递归调用彼此的函数。

您可能已经尝试使用 来抑制错误@json_encode(),不是吗?它会让错误消失,但不会让扁平圆形结构的痛苦消失。

于 2013-08-09T18:41:41.747 回答