将Java类(用于代码表示)解析为JSON对象

时间:2013-09-11 12:22:40

标签: java android json

在我正在开发的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 个答案:

答案 0 :(得分:1)

答案 1 :(得分:1)

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

答案 2 :(得分: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。

答案 3 :(得分:0)

你有Gson包将Json String转换为Java对象,反之亦然。

<强> MyClass.java

public class MyClass {
private String mStr = "";

public String getStr() {
    return mStr;
}

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

<强> Main.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 String表示如何处理“text”文件,假设您从服务器下载。但是没有什么内容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;
 .... 
}