node.js中的只读JSON对象

我需要给用户结果作为一个JSON对象,我caching结果。

在某些情况下,用户更改此结果对象,并且修改的版本可供后续用户使用。 为了避免这种情况,我目前正在克隆结果,但是这会导致很大的开销,因为它的非常大的JSON对象。

所以我想让JSON只读给出结果并避免克隆过程。 如何使一个JSON对象不可编辑?

你可以使用Object.freeze()来做到这一点:

var obj = {a: 'a', b: 'b'}; var freezeObj = Object.freeze(obj); freezeObj.a = 'c'; console.log("%j", freezeObj); // prints {"a":"a","b":"b"} console.log("%j", obj); // prints {"a":"a","b":"b"} console.log(obj === freezeObj); // prints true 

我们可以在recursion中调用Object.freeze。 我为我的用例创build了以下代码片段:

 var ObjConstrunctor = {}.constructor; function isJSONObject(obj) { if (obj === undefined || obj === null || obj === true || obj === false || typeof obj !== "object" || Array.isArray(obj)) { return false; } else if (obj.constructor === ObjConstrunctor) { return true; } else { return false; } } function freezeObject(obj) { if (Array.isArray(obj)) { Object.freeze(obj); for (var i = 0; i < obj.length; i++) { freezeObject(obj[i]) } } else if (isJSONObject(obj)) { Object.freeze(obj); for (var k in obj) { freezeObject(obj[k]) } } } freezeObject(obj);