Ну ересь же, нельзя так делать.
И даже не из-за рекурсивных объектов.
var a = {};
a.b = a;
try{JSON.stringify(a)}catch(e){alert(e)}
И не из-за объектов с иным порядком.
var a = {};
var b = {};
a.c = 1;
a.d = 2;
b.d = 2;
b.c = 1;
alert(JSON.stringify(a) + '\n' + JSON.stringify(b))
А просто потому, что это мерзко: гонять туда-сюда сложные преобразования, вместо того чтоб написать лишних пару строк.