我正在尝试发送一个复杂的数据结构,该数据结构由具有数组的对象组成,数组具有可能指向第一个对象的数组的对象等等......我得到了这个错误: TypeError:将循环结构转换为JSON ,我完全理解它为什么会发生。
我试图避免扁平化结构,因为处理成本太高,所以我想知道是否有任何其他方式我可以在发送我的http请求时简单地忽略此错误(将其发送到PHP页面)? / p>
答案 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()
来抑制错误,不是吗?它会使错误消失,但不会使扁平的圆形结构产生疼痛。