2015-04-01 56 views
1

我正在從JSON的encode_json以下錯誤(MAX_DEPTH設置得太低?):JSON文本或Perl結構超過最大嵌套級別

JSON文本或Perl結構超過最大嵌套級別(MAX_DEPTH設定得過低? )

的代碼是問題是

my $jsonString = encode_json($dataXML); 

$dataXML被XML ::簡單的生產。任何有關如何消除此錯誤的指針?

+0

創建以顯示錯誤的位置。這是一個複雜業務代碼的虛擬樣本。 – user1188611 2015-04-01 17:34:51

+1

不要這樣做。錯誤的代碼比部分代碼差。 – ikegami 2015-04-01 17:36:43

+0

噢好吧,但你已經理解錯誤在這裏吧? – user1188611 2015-04-01 17:37:18

回答

2

當結構有512層嵌套時,您從JSON :: PP中得到該錯誤。這可能意味着要捕獲非序列化的參考循環(my $data = { }; $data->{foo} = $data;),並防止惡意嘗試耗盡所有內存。

如果這些不是你的問題,如果問題只是你需要支持ginormous結構,你可以使用->max_depth來增加閾值。請記住,

encode_json($data) 

是短期的

my $json = JSON->new->utf8; 
$json->encode($data) 

所以你可以使用

my $json = JSON->new->utf8->max_depth(...); 
$json->encode($data) 

另外,JSON :: XS可能不會有檢查。如果沒有,只需安裝JSON :: XS就可以避免這個錯誤。這是加速你的編碼和解碼。

+0

我已經添加了最大深度爲2048的行my $ json = JSON-> new-> utf8-> max_depth(2048); – user1188611 2015-04-01 17:46:53

+0

有關於此的任何指針? – user1188611 2015-04-01 17:47:03

+0

即使在將最大深度設置爲5000之後,nope也會出現相同的錯誤,那麼會導致崩潰。失敗的案例和非失敗的案例之間的唯一區別只是一個額外的標記,不知道它是如何創造這麼多的差異 – user1188611 2015-04-01 17:52:27