Итак, я понятия не имею, почему вы хотите делать то, что, как вы говорите, вы хотите сделать, и я надеюсь, что вы нас всех напишите, но этот код должен быть достаточно близок, чтобы вы могли его настроить на основе некоторого моего кода, который я использую, чтобы найти различия в графах объектов JavaScript ):
function doStrangeThing(obj) {
var propertyChanges = [];
var objectGraphPath = [];
(function(obj, refObj) {
if ( obj.constructor == Object || (obj.constructor != Number &&
obj.constructor != String && obj.constructor != Date && obj.constructor != Boolean &&
obj.constructor != RegExp && obj.constructor != Function)) {
for (var property in obj) {
objectGraphPath.push((objectGraphPath.length > 0) ? "[" + property + "]" : property);
if (obj[property].constructor != Function) {
if (!refObj[property]) refObj[property] = {};
arguments.callee(obj[property], refObj[property]);
}
objectGraphPath.pop();
}
} else if (obj.constructor != Function) {
if (obj != refObj) {
propertyChanges.push("\"" + objectGraphPath.join("") + "\":\"" + obj.toString() + "\"");
}
}
})(obj, {});
return "{" + propertyChanges.join(",") + "}";
}
Вот что я сделал, чтобы проверить это:
doStrangeThing({'a':{'b':{'c':'1200'}}, 'z':'foo', 'bar':{'baz':'1', 'id':2}});
Что приводит к этому значению:
{"a[b][c]":"1200","z":"foo","bar[baz]":"1","bar[id]":"2"}
Надеюсь, это вам пригодится ...