gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 03:01:53 26 4
gpt4 key购买 nike

我有以下 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com