TypeError:将循环结构转换为JSON:有没有办法忽略此警告?

时间:2013-08-09 18:15:34

标签: php javascript arrays json http

我正在尝试发送一个复杂的数据结构,该数据结构由具有数组的对象组成,数组具有可能指向第一个对象的数组的对象等等......我得到了这个错误: TypeError:将循环结构转换为JSON ,我完全理解它为什么会发生。

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

2 个答案:

答案 0 :(得分:1)

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

var x = {y : x };

只会在左侧实际创建之前在右侧使用x吐出“未定义”错误。

如果你不能在一行JavaScript中表达某些内容,那么就无法用JSON表达它。

答案 1 :(得分:1)

你必须在某处拆分那个圆形结构。

从PHP 5.4开始,有一个接口JsonSerializable可用,允许对象在json_encode()询问时影响其json表示。

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

您可以尝试将该接口反向移植到早期版本的PHP,但您不仅需要该接口(这很简单),而且还需要json_encode()的替换功能来检测接口的存在,处理所有的事情。

您还可以尝试在对象中实现->toJson()函数,以递归方式相互调用。

你可能试图用@json_encode()来抑制错误,不是吗?它会使错误消失,但不会使扁平的圆形结构产生疼痛。