java的JavaScript数组
我有一个javascript数组,表示我所有学校的时间表。我正在编写一个android应用程序,我需要下载数据并以某种方式将其解析为java数组。我甚至可以使用php或其他web服务来下载数据并将其转换为json/xml或类似的东西。但到目前为止,我还没有找到任何好的解决办法,所以我想问你一些想法java的JavaScript数组,java,javascript,php,android,json,Java,Javascript,Php,Android,Json,我有一个javascript数组,表示我所有学校的时间表。我正在编写一个android应用程序,我需要下载数据并以某种方式将其解析为java数组。我甚至可以使用php或其他web服务来下载数据并将其转换为json/xml或类似的东西。但到目前为止,我还没有找到任何好的解决办法,所以我想问你一些想法 谢谢:)关于iOS部分,我找到了这个 import java.io.InputStreamReader; 导入java.io.Reader; 导入java.net.URL; 导入java.util.A
谢谢:)关于iOS部分,我找到了这个
import java.io.InputStreamReader;
导入java.io.Reader;
导入java.net.URL;
导入java.util.ArrayList;
导入java.util.array;
导入java.util.List;
导入javax.script.ScriptEngine;
导入javax.script.ScriptEngineManager;
导入sun.org.mozilla.javascript.internal.NativeArray;
公共班机{
公共静态void main(字符串[]args){
试一试{
URL jsUrl=新URL(“https://dl.dropboxusercontent.com/u/16258361/urnik/data.js");
Reader Reader=新的InputStreamReader(jsUrl.openStream());
ScriptEngineManager管理器=新建ScriptEngineManager();
ScriptEngine=manager.getEngineByName(“JavaScript”);
//评估脚本
发动机评估(读卡器);
System.out.println(Arrays.toString(parseJsArray(engine,“podatki”).toArray());
System.out.println(Arrays.toString(parseJsArray(引擎,“razredi”).toArray());
System.out.println(Arrays.toString(parseJsArray(引擎,“ucitelji”).toArray());
System.out.println(Arrays.toString(parseJsArray(引擎,“ucilnice”).toArray());
}捕获(例外e){
e、 printStackTrace();
}
}
公共静态列表parseJsArray(ScriptEngine引擎,字符串键){
NativeArray jsVar=(NativeArray)engine.get(key);
List=newarraylist((int)jsVar.getLength());
for(int i=0;i
好的,我终于解决了,所以我要回答我自己的问题
Ntsh使用ScriptEngine的想法(参见问题的注释)在java中很好,也很好地工作,但是由于默认情况下它不是android的一部分,我不得不导入jar。即使代码可以编译,但在某些设备上似乎也不起作用(我只在我的4.2 Genymotion VM中使用了它)
所以我搜索了另一种方法,并决定使用webview来运行javascrip。这似乎是一个糟糕的解决方案,但它确实有效:
首先,我在服务器上创建了一个php文件,在其周围添加了一些html和javascript代码,使其成为有效的html,并从这个js数组中生成json并打印出来
在android上,我只是在隐藏的webview中打开这个url,一旦页面被加载,我就获取它的源代码并提取相关数据,将它从json解析为java。这很有帮助
然而,这种方法有一些缺点:
- 它不能在后台运行(例如使用backgound服务和广播接收器),因为webview是gui元素
- 它有一个完整的安全性,因为加载到webview中的任何js文件都可以随时调用该函数(现在只在加载页面时调用)。这就是它如何注入其他文本等等
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
public class Main {
public static void main(String[] args) throws Exception {
String html = "";
URL url = new URL("https://dl.dropboxusercontent.com/u/16258361/urnik/data.js");
URLConnection connection = url.openConnection();
BufferedReader in = new BufferedReader(new InputStreamReader(
connection.getInputStream()));
String inputLine;
while ((inputLine = in.readLine()) != null)
html += inputLine;
in.close();
String array[] = html.split("podatki");
ArrayList<String> dataArray = new ArrayList<String>();
for (int i = 2; i < array.length; i++)
dataArray.add(array[i]);
String last = dataArray.get(dataArray.size()-1);
String lastCleared = "";
for (int i = 0; i < last.length(); i++) {
if (!last.substring(i, i+1).contains("r")) lastCleared += last.substring(i, i+1);
else break;
}
dataArray.set(dataArray.size() - 1, lastCleared);
for (int i = 0; i < dataArray.size(); i++) {
String string = dataArray.get(i);
if (string.contains("new Array")) {
dataArray.remove(i);
i--;
}
else {
string = string.replaceAll("]\\[", ";");
string = string.replaceAll("\\[", "");
string = string.replaceAll("]", "");
string = string.replaceAll("\"", "");
string = string.replace(" = ", ";");
dataArray.set(i, string);
}
}
int lastIndex1;
String string = "";
String lastString = dataArray.get(dataArray.size() - 1);
for (int i = 0; i < lastString.length(); i++) {
if (lastString.substring(i, i+1).contains(";"))
break;
string += lastString.substring(i, i+1);
}
lastIndex1 = Integer.parseInt(string);
boolean start = false;
for (int i = 0; i < lastString.length(); i++) {
if (start) {
string = lastString.substring(i, i + 1);
break;
}
if (lastString.substring(i, i+1).contains(";"))
start = true;
}
int lastIndex2 = Integer.parseInt(string);
String finalData[][] = new String[lastIndex1+1][lastIndex2+1];
for (int i = 0; i < dataArray.size(); i++) {
String components[] = dataArray.get(i).split(";");
if (components.length == 3)
finalData[Integer.parseInt(components[0])][Integer.parseInt(components[1])] = components[2];
else
finalData[Integer.parseInt(components[0])][Integer.parseInt(components[1])] = "";
}
for (int i = 0; i < finalData.length; i++) {
for (int j = 0; j < finalData[i].length; j++)
System.out.println(finalData[i][j]);
System.out.println("\n");
}
}
}
导入java.io.BufferedReader;
导入java.io.InputStreamReader;
导入java.net.URL;
导入java.net.URLConnection;
导入java.util.ArrayList;
公共班机{
公共静态void main(字符串[]args)引发异常{
字符串html=“”;
URL=新URL(“https://dl.dropboxusercontent.com/u/16258361/urnik/data.js");
URLConnection=url.openConnection();
BufferedReader in=新的BufferedReader(新的InputStreamReader(
getInputStream());
字符串输入线;
而((inputLine=in.readLine())!=null)
html+=输入行;
in.close();
字符串数组[]=html.split(“podatki”);
ArrayList dataArray=新的ArrayList();
for(int i=2;iimport java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
public class Main {
public static void main(String[] args) throws Exception {
String html = "";
URL url = new URL("https://dl.dropboxusercontent.com/u/16258361/urnik/data.js");
URLConnection connection = url.openConnection();
BufferedReader in = new BufferedReader(new InputStreamReader(
connection.getInputStream()));
String inputLine;
while ((inputLine = in.readLine()) != null)
html += inputLine;
in.close();
String array[] = html.split("podatki");
ArrayList<String> dataArray = new ArrayList<String>();
for (int i = 2; i < array.length; i++)
dataArray.add(array[i]);
String last = dataArray.get(dataArray.size()-1);
String lastCleared = "";
for (int i = 0; i < last.length(); i++) {
if (!last.substring(i, i+1).contains("r")) lastCleared += last.substring(i, i+1);
else break;
}
dataArray.set(dataArray.size() - 1, lastCleared);
for (int i = 0; i < dataArray.size(); i++) {
String string = dataArray.get(i);
if (string.contains("new Array")) {
dataArray.remove(i);
i--;
}
else {
string = string.replaceAll("]\\[", ";");
string = string.replaceAll("\\[", "");
string = string.replaceAll("]", "");
string = string.replaceAll("\"", "");
string = string.replace(" = ", ";");
dataArray.set(i, string);
}
}
int lastIndex1;
String string = "";
String lastString = dataArray.get(dataArray.size() - 1);
for (int i = 0; i < lastString.length(); i++) {
if (lastString.substring(i, i+1).contains(";"))
break;
string += lastString.substring(i, i+1);
}
lastIndex1 = Integer.parseInt(string);
boolean start = false;
for (int i = 0; i < lastString.length(); i++) {
if (start) {
string = lastString.substring(i, i + 1);
break;
}
if (lastString.substring(i, i+1).contains(";"))
start = true;
}
int lastIndex2 = Integer.parseInt(string);
String finalData[][] = new String[lastIndex1+1][lastIndex2+1];
for (int i = 0; i < dataArray.size(); i++) {
String components[] = dataArray.get(i).split(";");
if (components.length == 3)
finalData[Integer.parseInt(components[0])][Integer.parseInt(components[1])] = components[2];
else
finalData[Integer.parseInt(components[0])][Integer.parseInt(components[1])] = "";
}
for (int i = 0; i < finalData.length; i++) {
for (int j = 0; j < finalData[i].length; j++)
System.out.println(finalData[i][j]);
System.out.println("\n");
}
}
}