在我当前的项目中,我必须从Web上读取一个JavaScript文件并从中提取一个对象。变量可能会不时变化,因此我必须阅读它而不是将其硬编码到我的Android应用程序中。
假设我想提取以下变量(并在此之后使用JSONObject解析字符串,这很简单):
var abc.xyz = {
"a": {"one", "two", "three"},
"b": {"four", "five"}
}
我有这个问题。我是否必须实现一些类似编译器的扫描程序才能查找名称并获取其值,或者我可以使用一些现有的工具?
JavaScript文件并不像这个例子那么简单。它包含很多其他代码。所以一个简单的new JSONObject()
或其他东西不会。
答案 0 :(得分: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());
答案 1 :(得分: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);
}