2013-05-09 40 views
16

當使用JSON.stringify(或類似的東西)對對象進行字符串化時,是否存在限制字符串深度的方法,即僅在對象樹中深入級別,並忽略之後發生的所有事件(或更好:在那裏放置佔位符,表明有什麼被遺漏了)?限制JSON字符串深度

我知道JSON.stringify需要function (key, value)形式的替代函數,但是我沒有找到一種方法來獲取當前鍵值對的原始對象的深度,交給替換函數。

有沒有辦法做到這一點與默認的JSON.stringify實施?或者我是否已經達到了應該自己實施弦化的地步? 還是有另一個字符串庫,你可以推薦有這個選項?

+1

看起來像這個問題的接受答案可能會有所幫助:http://stackoverflow.com/questions/13861254/json-stringify-deep-objects – Strille 2013-05-09 16:10:42

+0

@Strille嗯,它確實包含一個我想做的實現。我認爲,這意味着默認實現是不可能的?我寧願使用默認實現,因爲我認爲它的本地實現更快。但是,感謝指針! – 2013-05-09 16:20:00

+0

不,我敢肯定,不幸的是,默認實現不能做你所問。 – Strille 2013-05-09 16:21:21

回答

1

對你的對象進行深層克隆(使用庫如low-dash),做任何修剪你想要做的事情,然後把它傳遞給JSON.stringify。我不會試圖重新發明JSON.stringify,這是在錯誤的地方努力。

[編輯]看起來已經有人做了什麼你暗示:JSON.stringify deep objects

我不會推薦這雖然因爲本地JSON.stringify總是要更快,更可靠

[編輯]這裏是似乎做一個庫,你想要什麼:http://philogb.github.io/jit/static/v20/Docs/files/Core/Core-js.html# $ jit.json.prune

+0

你的意思是*有限深度的克隆*? – Bergi 2014-04-04 12:46:40

+0

是的,可以這樣做,可能比複製和修剪更有效 – 2014-04-04 12:52:44

2

我想字符串化第一水平的物體而不包括第三方庫/代碼太多。

如果您要查找的一樣,這裏是一個快速的單行這樣做:

var json = JSON.stringify(obj, function (k, v) { return k ? "" + v : v; }); 

例:

var obj = { 
 
    keyA: "test", 
 
    keyB: undefined, 
 
    keyC: 42, 
 
} 
 
obj.keyD = obj; 
 

 
var json = JSON.stringify(obj, function (k, v) { return k ? "" + v : v; }); 
 
console.log(json);

通過添加在值之前爲空字符串,它會自動將值轉換爲字符串。但是,我們需要檢查密鑰以確保不投射,當元素爲空或未定義時。