1

JavaでScriptEngineを使用してJavascriptファイルを解析しようとしています。スクリプトの実行には興味がなく、値を取得するためにスクリプトを解析するだけです。

スクリプトファイルは、次の構造の一連の配列で構成されています。

var array= new Array();
array[0]=new Array();
array[0]['point']=new Point2D(2.454,-8.33);
array[0]['name']='Object 1';
array[1]=new Array();
array[1]['point']=new Point2D(42.84, 3.53);
array[1]['name']='Object 2';

...

Point2Dは次のように定義されています。

function Point2D(x,y) {
this.x = x;
this.y = y;
}

これまで、次のコードを使用してスクリプトを解析しました。

ScriptEngineManager mgr = new ScriptEngineManager();
ScriptEngine se = mgr.getEngineByName("JavaScript");
try {
  se.eval(file);
  NativeArray array = (NativeArray)se.get("array");
  for(int i = 0; i < array.getLength(); i++){
    if(array.get(i)!=null){
      NativeArray elementArray = (NativeArray)array.get(i);
      System.out.println("Object: " + elementArray);
      System.out.println("name: " + elementArray.get("name", elementArray));
      System.out.println("point: " +  elementArray.get("point", elementArray));
    }
  }
}
catch (ScriptException e) {
      ....
}

これで名前は正しくわかりますが、Point2DアイテムのObjectクラスのインスタンスを取得します。元々はjavascriptオブジェクトだったので、どうすればそれを解析してx値とy値を取得できますか?

4

2 に答える 2

1

さて、@ Pointyのおかげで私は解決策を見つけました、私はこのコードをifステートメントの中に注入しました:

se.eval("var x = array[" + i + "]['point'].x; var y = array[" + i + "]['point'].y;", se.getBindings(ScriptContext.ENGINE_SCOPE));
于 2012-10-13T14:39:43.887 に答える
1

次のようにできます。

    NativeObject point;
    NativeArray elementArray;
    for(int i = 0; i < array.getLength(); i++){
        if(array.get(i)!=null){
            elementArray = (NativeArray)array.get(i);                
            System.out.println("name: " + elementArray.get("name", elementArray));
            point = (NativeObject) arrayFirstElement.get("point", arrayFirstElement);
            //System.out.println("point.x: " +  NativeObject.getProperty(point, "x"));
            //System.out.println("point.y: " +  NativeObject.getProperty(point, "y"));
            System.out.println("object point has: ");
            for ( Object propertyId : NativeObject.getPropertyIds(point)){
                System.out.println("property "+ propertyId + " has value " + NativeObject.getProperty(point, propertyId.toString()));
            } 
        }
    }

しかし、これらのチュートリアルを見てみましょう: 1 , 2 , あなたはいくつかの新鮮なアイデアを得るかもしれません:)

于 2012-10-13T17:35:16.363 に答える