для преобразования текста JSON в объект, вы можете использовать Eval() функции. Функция eval работает очень быстро. Однако он может компилировать и выполнить любую программу JavaScript, поэтому могут возникнуть проблемы с безопасностью. Чтобы защитить его, следует использовать парсер JSON. (link)
Если вы посмотрите на JSON.parse (по Doughlas Crockford), он в основном готовит строку для Eval. Таким образом, вы можете сохранить подготовленную строку & использовать eval на ней.
JSON.prepare = function(text) {
var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g;
cx.lastIndex = 0;
if (cx.test(text)) {
text = text.replace(cx, function (a) {
return '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4);
});
}
if (/^[\],:{}\s]*$/.test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@')
.replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']')
.replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) {
return '(' + text + ')';
}
};
И использовать его как:
myJson = JSON.prepare(myJson);
var a = eval(myJson),
b = eval(myJson);
Это, наверное, самое лучшее, что делать, так как глубокие копии может быть проблематичным и синтаксический довольно быстро, если JSON не огромна (в этом случае глубокая копия будет быть слишком медленным). (На самом деле, я думаю, что глубокая копия только что разобранного блога JSON не столкнулась бы с чем-то сложным, как циклы, но я бы все еще просто разбирал дважды.) – Pointy
Возможно, вы захотите изучить клонирование объектов JavaScript: http: // stackoverflow .com/questions/728360/most-elegant-way-to-clone-a-javascript-object – Frithjof
@ Великолепное спасибо, я пытался избежать всех этих элементов дублирования, я должен сделать это для более чем 10 переменных ... но если это лучший способ пойти, я буду придерживаться его – marcosh