java的JavaScript数组

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

我有一个javascript数组,表示我所有学校的时间表。我正在编写一个android应用程序,我需要下载数据并以某种方式将其解析为java数组。我甚至可以使用php或其他web服务来下载数据并将其转换为json/xml或类似的东西。但到目前为止,我还没有找到任何好的解决办法,所以我想问你一些想法


谢谢:)

关于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");
      }
   }
}