gpt4 book ai didi

java - 在 Java 中解析 Javascript,Javascript 对象

转载 作者:行者123 更新时间:2023-11-30 18:17:40 24 4
gpt4 key购买 nike

我正在尝试使用 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值?

最佳答案

你可以这样做:

    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 , 你可能会得到一些新鲜的想法:)

关于java - 在 Java 中解析 Javascript,Javascript 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12873786/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com