如何在Java中获取Javascript变量的值?

4
在我的当前项目中,我必须从Web读取JavaScript文件并提取其中的一个对象。变量可能随时变化,因此我必须读取它,而不是将其硬编码到我的Android应用程序中。
假设我想要提取以下变量(然后使用JSONObject解析字符串,这很简单):
var abc.xyz = {
"a": {"one", "two", "three"},
"b": {"four", "five"}
}

我对此有些困惑。我是否需要实现类似编译器的扫描器来查找名称并获取其值,还是有现成的工具可以使用?
JavaScript文件不像这个例子那么简单。它包含了很多其他的代码。因此,简单的new JSONObject()或者其他什么方法都行不通。

2
请尝试使用 Rhino - Anirudh Ramanathan
一个更好的方法是将数据以JSON格式存储在服务器上。在JavaScript/网页浏览器中加载JSON数据就像在Java中一样简单。 - Robert
@Cthulhu 的建议很好,但由于 JavaScript 是针对浏览器的,所以它会崩溃。 - onemach
2个回答

1

Java中有许多用于解析JSON的库。在JSON.org上有一个列表。

使用Java读取文件。

import org.json.JSONObject;

URL url = new URL("http://example.com/foo.js");
InputStream urlInputStream = url.openStream();
JSONObject json = new JSONObject(urlInputStream.toString());  

我知道如何解析它。我正在询问如何获取它。 - onemach
进行一个 HTTP 请求,你的问题并没有说明要读取它。笑 - epascarello

0

最后我自己编写了代码。

//remove comments
private String removeComment(String html){
    String commentA = "/*";
    String commentB = "*/";
    int indexA, indexB;
    indexA = html.indexOf(commentA);
    indexB = html.indexOf(commentB);
    while(indexA != -1 && indexB != -1 ){
        html = html.substring(0, indexA) + html.substring(indexB + commentB.length());
        indexA = html.indexOf(commentA);
        indexB = html.indexOf(commentB);
    }
    return html;
}

    //find variable with name varName
private String findVar(String varName, String html, char lBrace, char rBrace){
    String tmp = html.substring(html.indexOf(varName));
    tmp = tmp.substring(tmp.indexOf(lBrace));

    int braceCount = 0;
    int index = 0;
    while(true){
        if(tmp.charAt(index) == lBrace){
            braceCount ++;
        }else if(tmp.charAt(index) == rBrace){
            braceCount --;
        }
        index ++;
        if(braceCount == 0){
            break;
        }
    }
    return tmp.substring(0, index);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接