我正在尝试处理来自 a 的数据NativeObject
,但我发现对象属性的命名存在一个小问题。该对象的 JavaScript 代码是:
var mainObject = {
"innerObject" : {
"234" : {
"property1" : "1",
"property2" : "2"
}
}
}
我用 Java 处理它的方法如下所示:
public void processNative(NativeObject obj) {
if(NativeObject.hasProperty(obj, "innerObject")) {
NativeObject no = (NativeObject)NativeObject.getProperty(obj, "innerObject");
Object[] propIds = NativeObject.getPropertyIds(no);
for (int i = 0; i < propIds.length; i++) {
String key = propIds[i].toString();
NativeObject numObj = (NativeObject)NativeObject.getProperty(no, key);
//do more processing here
}
}
}
此代码将引发此异常:java.lang.ClassCastException: org.mozilla.javascript.UniqueTag cannot be cast to org.mozilla.javascript.NativeObject
.
如果我转换为 aUniqueTag
我实际上可以获得正确的值,在这种情况下将是UniqueTag.NOT_FOUND
.
我发现这有点令人困惑,因为我从对象本身获取属性键,并且它实际上存在于 JavaScript 代码中。
如果我将对象的名称从“234”更改为“car”,代码会按预期工作,所以我假设命名存在问题。从这篇文章中我了解到属性名称可以是任何类型的字符串,因此使用数字组成的字符串应该没有问题。
所以我想一个后续问题是:有没有办法让我解决这个问题而不必重命名?
我需要提到的另一件事是我只能访问 JavaScript 代码和 Java 方法。其他一切都是黑匣子。
谢谢!