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);

クリスパマーレの礼儀:

有効な 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

ajson オブジェクトを作成してから、それにプロパティを追加してみ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 に答える