2011-10-10 5 views
4

まあ、私はjavascriptの変数をたくさん持っています(私は他のページから取得しています)。 これを行うにはどうすればよいですか? 私はMicrosoft.Jscriptクラスを使用しており、あなたのメソッドは動作しています。C#を使用してjscriptを実行し、配列の値を返す方法は?

私は次のコードで書かれた

static Dictionary<string, string> ParseVariables(string code) 
     { 

      string[] variables = code.Split(';'); 
      Dictionary<string, string> variablesValues = new Dictionary<string, string>(); 
      for (int i = 0, len = variables.Length - 1; i < len; i++) 
      { 
       string vvar = variables[i]; 
       string varName = Regex.Replace(vvar.Split('=')[0], @"^\s*var\s*", string.Empty).Trim(); 
       var compiler = Compile(vvar);     
       string varValue = compiler.ToString(); 
       variablesValues.Add(varName, varValue); 
      } 

      return variablesValues; 

     }   


static object Compile(string JSource) 
     { 
      return Microsoft.JScript.Eval.JScriptEvaluate(JSource, Microsoft.JScript.Vsa.VsaEngine.CreateEngine()); 
     } 

これは以下のように、いくつかのケースに正常に動作します:

var jscript = "var x = 'foo'; var y = 'baa';"; 
var output = ParseVariables(jscript); 
var val = output["y"]; //baa 
var val2 = output["x"]; //foo 

が、このような場合に:

var jscript = "var x = {}; x['foo'] = 'baa'; x['baa'] = 'test';"; 
var output = ParseVariables(jscript); 
var val = output["x['foo']"]; //not works 

私はこれを行う方法を?どんな助けもありがとう!ありがとう!

+0

を何を求めているのですか?これはASP.NETページですか?あなたが話しているJavaScriptはブラウザで動作していますか? –

+0

@Jonh:これはコンソールアプリケーションですか。 javascriptコード他のページから文字列として取得しています –

+0

これは非常に珍しい環境です。質問を編集して説明することを強くお勧めします。 –

答えて

2

JScriptのソースコードをセミコロン(;)で区切って分割すると、var;の間の部分だけがコンパイルメソッドを使用してコンパイルされます。

JScriptソースコードをvar x = { "foo": "baa", "baa": "test" };に変更すると、コンパイルメソッドが正常に動作し、ScriptObjectオブジェクトが返されます。

しかし、別のエラーがあります。結果の辞書に値を挿入する前にToStringを使用しています。

ご自分のコードを一行一通りご確認ください。これは明白です。

より良い方向に始めるために、これを試してみてください:

変更Compileメソッドのように、ScriptObjectを返すに:

static ScriptObject Compile(string JSource) 
{ 
    return (ScriptObject)Microsoft.JScript.Eval.JScriptEvaluate(JSource, Microsoft.JScript.Vsa.VsaEngine.CreateEngine()); 
} 

次に、この試してみてください。それは非常に不明だ

var x = Compile("var x = { foo: 'baa', bar: { 'nisse': 'kalle' } };"); 

var foo = x["foo"]; 
var bar = (ScriptObject)x["bar"]; 
var nisse = bar["nisse"]; 
1

ここには多くの仮定があるようです。たとえば、すべての値を1行に戻しているとします。

string vvar = variables[i].Trim(); 

不要な改行やその他の空白を削除します。

compiler.ToString()の出力を2番目の例として転記できますか?私は問題がJScriptコンパイラではなく、解析にあると推測します。

また、何がこのような場合に起こります。

var foo = 'a'; 
foo = 'b'; 
foo = 'c'; 

何値fooは、で終わるのでしょうか?

関連する問題