0

在我正在开发的 android 应用程序中,我需要获取一个包含一些数据的 json 文件来重建 java 类的代码行。是否有任何 java/javascript 库允许以 JSON 格式转换/解析 java 类(不仅具有字段,还包含其中定义的方法),反之亦然?

编辑:我还需要跟踪整个项目的结构(类似于 antlr?)

EDIT2:我的错,我想将一个 java 类代码存储到一个 JSON 对象中来表示它,我还想通过解析 Java 代码并查找方法、类、参数来创建自己的 json 对象。

{
    "file": "PATH/TO/.java",
    "language": "java",
    "from": 0,
    "to": 255,
    "classes": [
        "Test:2"
        //...
    ],
    "lines": [
        [
            "public class Test{"
            //...
        ]
    ]
}

但如果有一个好的起点,那就太好了。

4

4 回答 4

1

您可以使用杰克逊- http://jackson.codehaus.org/:http://www.mkyong.com/java/how-to-convert-java-object-to-from-json-jackson/

于 2013-09-11T12:28:18.733 回答
1

使用 GSON:“GOOGLE for JSON”它是一个谷歌开源 JSON 库,它可以将 Java 对象转换为 JSON 对象,反之亦然

于 2013-09-11T12:40:45.033 回答
1

问题在于现有工具(例如 GWT)“仅”能够创建旨在在浏览器中执行的功能性 JS 代码。但它不一定类似于原始的 Java 类。您的用例听起来完全不同。看起来您想将 Java 源代码表示为 JSON 数据,而您不需要/不想执行它。

我担心您可能必须为此创建自己的工具,以满足您的特定要求。我还担心这个工具必须能够解析 Java 代码,因为使用简单的正则表达式来提取数据在这里没有多大帮助,因为嵌套类型(接口、类、枚举)以及单个 Java 文件可能包含多种类型声明(尽管不鼓励,但这是可能的)。

以下是 Java 解析器的一些链接:

http://code.google.com/p/javaparser/(不幸的是只有 Java 1.5)

http://www.ibm.com/developerworks/opensource/library/os-ast/(讨论 Eclipse Java 解析器,它非常健壮,可能最适合您的要求)

您还可以按照您的建议使用 ANTLR 创建自己的解析器。据我所知,最新的 ANTLR 版本有一些需要用 Java 实现的访问者模式。您可以实现一个访问者,该访问者连续构建您的 JSON 输出。

但是,您确实应该为此使用 Eclipse 的 ASTParser,因为您可以轻松地迭代类的所有方法并将它们的实现代码作为 String。

于 2013-09-11T14:08:33.383 回答
0

您有将 Json 字符串转换为 Java 对象的Gson包,反之亦然。

MyClass.java

public class MyClass {
private String mStr = "";

public String getStr() {
    return mStr;
}

public void setStr(String mStr) {
    this.mStr = mStr;
}
}

主.java

public class Main { 
public static void main(String[] args) {
    String jsonString  = "{ \"mStr\": \"foo\" }";

    Gson mGson = new Gson(); 
    MyClass res = mGson.fromJson(jsonString, MyClass.class); 

    System.out.println(res.getStr());
}   
}

输出:foo

[编辑 1]

您不能存储到Json类结构,只能存储数据

[编辑 2]

从您的修复中,我了解到以下内容:

此 Json 字符串表示如何处理“文本”文件的行为,假设您从服务器下载。但是无论 Json String 内部是什么,首先您需要将其转换为 Java 中的 Object(如果您想使用 Java),然后根据规则(取自 Json String)编写任何逻辑。确保 java 代码能够生成 Java 文件。你的例子告诉你:

  • 从行...到行获取文本,
  • 创建名为 xxxx.java 的文件
  • 复制到...

所以使用我上面的例子,创建类,让我们说Launcher

public class Launcher{
 private String file;
 private String language;
 private int from;
 private int to;
 private List<String> classes; 
 private List<SomeOtherClass> lines;
 .... 
} 
于 2013-09-11T12:24:41.183 回答