Java/Kotlin JSON解析改进

Ult*_*o_m 7 java parsing android json kotlin

我使用了一个API,它给了我这种类型的JSON:

{
  "data": {
    "name": "Start",
    "pid": "1",
    "position": {
      "data": {
        "x": "31",
        "y": "330"
      },
      "metadata": "empty"
    }
  },
  "metadata": "empty"
}
Run Code Online (Sandbox Code Playgroud)

我创建了具有与上述JSON相同结构的对象的类.我retrofit在Android中使用lib,里面GSON用于解析JSON.

我的模型类是这样的:

MResponse.class

public class MResponse {

    @SerializedName("data")
    public User user;

    String metadata;
}
Run Code Online (Sandbox Code Playgroud)

User.class

public class User {

    public String name;

    public String pid;

    @SerializedName("position")
    public PositionData positionData;
}
Run Code Online (Sandbox Code Playgroud)

PositionData.class

public class PositionData {

    @SerializedName("data")
    public Position position;

    public String metadata;
}
Run Code Online (Sandbox Code Playgroud)

Position.class

public class Position {

    public String x;

    public String y;
}
Run Code Online (Sandbox Code Playgroud)

现在这对我来说很好.但正如你可以看到的每个模型我必须创建一个具有相同结构的父级只需更改子级.这个事实使我用于模型的类加倍.我想问一下是否有更好的方法来避免所有这些类.

我不想使用内部类.我认为那些像这样完成JSON的人必须有这样的理由为什么他们这样做,也是一种使解析更容易的方法.

通常我习惯于解析这种JSON结构:

{
  "data": {
    "name": "Start",
    "pid": "1",
    "position": {
      "x": "31",
      "y": "330"
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

如果我按照上面的解决方案,这里会更容易.

编辑

Kotlin的任何解决方案都受到欢迎

编辑2

Kotlin的解决方案在这里

Ult*_*o_m 0

嗯,在我看来,我要求的解决方案非常简单,我只是一开始就不知道。

基于源代码Retrofit和其他一些相关答案Java generics是我的问题的答案:

public class DataResponse<T, R> {

    public T data;

    @SerializedName("meta")
    public R metadata;
}
Run Code Online (Sandbox Code Playgroud)

这是我如何使用它的示例:

Observable<DataResponse<User, BaseMeta>> getUser()
Run Code Online (Sandbox Code Playgroud)

对我来说,这就是解决方案。如果有更好的解决方案,我愿意接受。