3

我懂了:

var a = "slices: {0: {color: '#ffffff'}, 1: {color: '#fffff0'}, 2: {color: '#fff000'},3: {color: '#ff0000'}, 4: {color: '#f00000'}}";

你可以看到它是一个字符串变量

我需要这个

draw(data, {slices: {0: {color: '#ffffff'}, 1: {color: '#fffff0'}, 2: {color: '#fff000'},3: {color: '#ff0000'}, 4: {color: '#f00000'}}, is3D: true});

如您所见,我需要提供变量而不是字符串,我尝试这样做

eval( "slices: {0: {color: '#ffffff'}, 1: {color: '#fffff0'}, 2: {color: '#fff000'},3: {color: '#ff0000'}, 4: {color: '#f00000'}}");

但没有用,我不能这样做

draw(data, {a, is3D: true});

谢谢你的时间。

4

6 回答 6

3

首先将您的字符串修复为有效的 JSON,然后:

JSON.parse('{' + a + '}');

编辑:Antti Haapala 提出了一个很好的观点

JSON.parse(a);

crisamares提供:

一个有效的 JSON 是这样的:"{"slices": {"0": {"color": "a"}, "1": {"color": "#fffff0"}, "2": {"color": "#fff000"},"3": {"color": "#ff0000"}, "4": {"color": "#f00000"}}}"

====

如果您需要支持 <IE8,请使用 Crockford 的 JSON2 (http://www.json.org/js.html)

于 2012-09-27T17:07:45.380 回答
2

因此这样做:

var values = eval('({' + a + '})');
draw(data, values);
于 2012-09-27T17:08:14.120 回答
1

一个有效的 JSON 如下所示:

'{"slices": {"0": {"color": "a"}, "1": {"color": "#fffff0"}, "2": {"color": "#fff000"},"3": {"color": "#ff0000"}, "4": {"color": "#f00000"}}}' 

您可以使用http://jsonformatter.curiousconcept.com/来验证您的 JSON,然后使用 JSON.parser 作为 BLSully sugested

于 2012-09-27T17:22:49.883 回答
0

您可以使用eval许多答案中所示的方法。您还可以尝试像https://raw.github.com/douglascrockford/JSON-js/master/json2.js这样的 JSON 解析器

或者你可以使用setTimeout

function draw(a, b){
    console.log(a, b);
}

var data = "sample data";

var a = "slices: {0: {color: a}, 1: {color: '#fffff0'}, 2: {color: '#fff000'},3: {color: '#ff0000'}, 4: {color: '#f00000'}}";

setTimeout("draw(data, {" + a + "});", 100);
于 2012-09-27T17:16:45.080 回答
0

你能不能...

var a = 'draw(data, {slices: {0: {color: a}, 1: {color: '#fffff0'}, 2: {color: '#fff000'},3: {color: '#ff0000'}, 4: {color: '#f00000'}}, is3D: true})';

然后 eval(a);

为什么那行不通?

于 2012-09-27T17:09:31.450 回答
0

为什么不创建a一个 json 对象,然后将is3D属性添加到它?

var a = {slices: {0: {color: a}, 1: {color: '#fffff0'}, 2: {color: '#fff000'},3: {color: '#ff0000'}, 4: {color: '#f00000'}}};
if(itNeedsToBe3D) a.is3D = true;     
else a.is3D = false;
draw(data, a);
于 2012-09-27T17:10:06.300 回答