在Java中创建JSON对象的方法

时间:2017-01-25 08:03:54

标签: java android json

以下是我想在iOS(Swift)和Android(Java)应用程序中使用的JSON主体。

{
    "type" : "select",
    "args" : {
        "table"  : "todo",
        "columns": ["id", "title","completed"],
        "where"  : {"user_id": 1}
    }
}

在Swift中,将上述内容转换为字典非常简单易行:

let params: [String: Any] = [
  "type" : "select",
  "args" : [
    "table"     : "todo",
    "columns"   : ["id","title","completed"],
    "where"     : ["user_id" : 1]
  ]
]

在Java中,我使用GSON来执行上述操作,但我觉得我的解决方案很难看而且太长了

public class SelectQuery {

    @SerializedName("type")
    String type = "select";

    @SerializedName("args")
    Args args;

    public SelectTodoQuery(=) {
        args = new Args();
        args.where = new Where();
        args.where.userId = 1;
    }

    class Args {

        @SerializedName("table")
        String table = "todo";

        @SerializedName("columns")
        String[] columns = {
                "id","title","completed"
        };

        @SerializedName("where")
        Where where;

    }

    class Where {
        @SerializedName("user_id")
        Integer userId;
    }

}

有没有更好的方法在Java中执行此操作,以及如何在不使用GSON的情况下在Java中本地表示此JSON?

更新

我不是要求提供帮助我完成上述操作的库列表,我已经知道它们并且显然正在使用它们。我也不需要了解他们的表现。 我要求更好的实现(如果它存在),如果Java没有提供这样的功能,那也可以是一个公认的答案。 此外,还有一个在Java中本地执行相同操作的示例。

2 个答案:

答案 0 :(得分:1)

好吧,有几个库可用于序列化和反序列化json之间的对象。

GSON是最简单的一个,您可以将POJO(计划旧的Java对象)转换为JSON而不注释它们。

LoganSquare是用于此目的的最佳库,它需要您注释您的字段,但性能非常高。

Github页面实际上讲述了LoganSquare与其他选项的基准研究。

enter image description here

还有其他一些像MoshiJackson,但考虑到平台的限制,我发现LoganSquare是最好的。

  

就Native功能而言,Java到目前为止还没有提供   任何这样的实用程序,如果有人对Third partylibs不感兴趣,我上面提到的项目都是开源对象,   一个人可以分叉它们并根据一个人实现自己的版本   usecases。

答案 1 :(得分:0)

使用Gson你可以试试这样的东西,我不确定你想在这里读到的类型:

vagrant up