4

在我当前的项目中,我必须从网络上读取一个 JavaScript 文件并从中提取一个对象。该变量可能会不时变化,因此我必须阅读它而不是将其硬编码到我的 android 应用程序中。

假设我想提取以下变量(然后使用 JSONObject 解析字符串,这很简单):

var abc.xyz = {
"a": {"one", "two", "three"},
"b": {"four", "five"}
}

我有这个问题。我是否必须实现一些类似编译器的扫描程序才能查找名称并获取其值,或者有一些我可以使用的现有工具?

JavaScript 文件不像这个例子那么简单。它包含许多其他代码。所以一个简单的new JSONObject()东西还是不行的。

4

2 回答 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());  
于 2012-11-05T13:20:08.180 回答
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);
}
于 2012-11-06T08:30:39.583 回答