java - 将具有不同对象的 json 数组解析为它们的类

标签 java json parsing gson

我有以下 json:

[
    {
        "type": 1,
        "Steps": {
            "steps": steps
        }
    },
    {
        "type": 2,
        "HeartRate": {
            "heartrates": heartRates
        }
    }
]

字段steps只是一个int,heartRates是一个int数组。我想要 使用 gson 将其解析为两个类。 我在stackoverflow上发现了类似的问题:How parse json array with multiple objects by gson?并尝试过,但没有成功。这是我的代码:

public class DataModels extends ArrayList<DataModels.Container> {

public class Container {
    public int type;
    public Object object;
}

public class Steps {

    double steps;

    public Steps(double steps) {
        this.steps = steps;
    }

    public double getSteps() {
        return steps;
    }

    @Override
    public String toString() {
        return "Steps: " + steps;
    }

}

public class HeartRate {

    int heartRate;

    public HeartRate(int hr) {
        heartRate = hr;
    }

    public double getHeartRate() {
        return heartRate;
    }

    @Override
    public String toString() {
        return "Heart rate: " + heartRate;
    }

}
}

然后解析我的 json:

public String getJSONMessage(String gearSData) {
    System.out.println(gearSData);
    Gson gson = new Gson();
    DataModels model = gson.fromJson(gearSData, DataModels.class);
    System.out.println(model);
    for (DataModels.Container container: model) {

        System.out.println(container.type);
        System.out.println(container.object);
        String innerJson = gson.toJson(container.object);
        System.out.println("InnerJson: " + innerJson);

        switch (container.type) {
            case 1:
                DataModels.Steps steps = gson.fromJson(innerJson, DataModels.Steps.class);
                System.out.println(steps);
                break;
            case 2:
                DataModels.HeartRate heartRate = gson.fromJson(innerJson, DataModels.HeartRate.class);
                System.out.println(heartRate);
                break;
        }
    }
}

类型被正确解析,但innerjson为空,我不知道为什么。有人可以解释一下吗?或者有人知道更好的方法吗?

最佳答案

字段名称应与 json 中的字段相同。我刚刚重命名了您的类的字段,您的代码对我来说效果很好:

public static String getJSONMessage(String gearSData) {
    System.out.println(gearSData);
    Gson gson = new Gson();
    DataModels model = gson.fromJson(gearSData, DataModels.class);
    System.out.println(model);
    for (DataModels.Container container : model) {

        System.out.println(container.type);
        String innerJson = gson.toJson(container.type == 1 ? container.Steps : container.HeartRate);
        System.out.println("InnerJson: " + innerJson);
        //...
    }
    return null;
}

public static class DataModels extends ArrayList<DataModels.Container> {
    public static class Container {
        public int type;
        public StepsType Steps; // object for type 1
        public HeartRateType HeartRate; // object for type 2
    }

    public static class StepsType {
        double steps;
        //...
    }

    public static class HeartRateType {
        int heartrates;
        //...
    }
}

关于java - 将具有不同对象的 json 数组解析为它们的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35744791/

相关文章:

C# - 解析 XSD 架构 - 将所有元素获取到组合框

Python,在解析 JSON 对象时正确处理关键错误

java - 在页面中显示特殊字符

java - DTO Collection 智能数据收集

sql - 在SQL数据库上保存Json的最佳实践

Java 和 Tomcat org.json java.lang.ClassNotFoundException

c# - Coco/R 与 ANTLR

javascript - Java中的Math.exp计算错误?

java - 从RecyclerView迁移到PagedListAdapter,使用submitList不显示数据(Android Studio JAVA)

json - Node.js - 我可以在 Redis 中将可写流存储为 JSON 吗?