2013-10-09 3 views
1

У меня есть строка, содержащая объект буквальная:Как преобразовать объект в его литеральную строку?

var literalStr = "{ 
    a: 1, 
    b: function(){return 'b'} 
}"; 

я могу создать объект из строки:

var obj = eval("(" + literalStr + ")"); 

Есть простой способ, чтобы получить буквенную строку обратно от объекта?

Я ищу что-то вроде JSON.stringify(), но поэтому он создает оригинальный литерал с именами функций и свойств без кавычек.

+0

Это то, что [ 'toSource'] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/ Global_Objects/Object/toSource), но это зависит от Firefox. – georg

+1

@akmidd у вас уже есть это в literalStr. Почему вы не можете использовать его? – user10

+0

Потому что я хочу получить литерал из любого объекта не только из тех, что созданы известными литералами. –

ответ

1

Вы ищете нестандартные toSource method(s). Обратите внимание, что кросс-браузерная версия невозможна, потому что некоторые js-механизмы не дают возможности получить исходную строку из функции.

+0

"невозможно" .. крепкое слово! –

+0

@Buchow_PHP: Но я имею в виду. Проверьте [perfectionkills.com/those-tricky-functions](http://web.archive.org/web/20130531031212/http://perfectionkills.com/those-tricky-functions/) – Bergi

0
function stringify(source) { 
    if (typeof (source) == "object") { 
     var str = "{"; 
     for (var key in source) { 
      var value = source[key]; 
      str += key + ":" + stringify(value) + ","; 
     } 
     return str.substring(0,str.length-1) + "}"; 
    } 
    return source.toString(); 
} 

затем

console.log(stringify(obj)); 
// writes "{a:1,b:function(){return 'b'}}" 

Demo in jsFiddle

+1

Я думаю, что это намного сложнее чем это. Во-первых, он не обрабатывает строки правильно. – georg

+0

Вы можете легко добавить 'if (typeof (source) ==" string ") ...' –

Смежные вопросы