0

Here is a string:

"{aa:function(){},bb:document.body}"

JSON.parse doesn't work for this,how to convert it to JS object?

Gopal Bhuva
  • 654
  • 2
  • 13
  • 20
Fei Sun
  • 361
  • 1
  • 3
  • 10

3 Answers3

2

You could use eval with a prepended assingment.

Caveat: Why is using the JavaScript eval function a bad idea?

var string = "{aa:function(){},bb:document.body}",
    object;
    
eval('object = ' + string);

console.log(object);
Nina Scholz
  • 376,160
  • 25
  • 347
  • 392
  • To complete your answer, it can also be achieved with ```var obj = eval('(' + string + ')')```. (Using parantheses so that the object is not parsed as a block) – Stefan Octavian Apr 18 '18 at 09:11
1

An option in this case could be to use new Function().

It is less evil than eval(), and here is an answer with an explanation about their difference:

Stack snippet

var string = "{aa:function(){},bb:document.body}",
    object;
    
object = new Function( 'return (' + string + ')' )();

console.log(object);
Asons
  • 84,923
  • 12
  • 110
  • 165
0

In case you need to treat the string as a json object:

let str = "{\"aa\":\"function() { console.log('Look mama no hands'); }\",\"bb\":\"document.body\"}";
let obj = JSON.parse(str);
let func = null;
eval("func = "+obj.aa);
func();
Felipe Plazas
  • 174
  • 1
  • 9