你需要通过
class
这是意料之中的,否则它不会知道它是什么:
AirPollution convertedObject = new Gson().fromJson(json, AirPollutionResponse.class);
虽然
class AirPollution
可能需要也可能不需要进一步的代码注释。。。这取决于字段名是否与输入的JSON字段名匹配。在Android上,模型类通常会有很多注释,例如,当它们与Retrofit(内部使用GSON)和Room一起使用时。
另请参阅GSON
user guide
.
该模型类与输入的JSON至少不匹配。。。因为阅读是带着信封的。
{
"coord": {
"lon": 50,
"lat": 50
},
"list": [{
"main":{
"aqi": 1
},
"components":{
"co": 267.03,
"no": 0,
"no2": 0.47,
"o3": 76.53,
"so2": 1.65,
"pm2_5": 0.87,
"pm10": 3.09,
"nh3": 0.07
},
"dt": 1640437200
}]
}
现在删除的答案并没有错,因为这需要5!!要映射的Java类。
等级
AirPollution
:
import com.google.gson.annotations.SerializedName;
public class AirPollution {
@SerializedName("co")
private Double carbonMonoxide = 0.0;
@SerializedName("no")
private Double nitricOxide = 0.0;
@SerializedName("no2")
private Double nitrogenDioxide = 0.0;
@SerializedName("o3")
private Double ozone = 0.0;
@SerializedName("so2")
private Double sulfurDioxide = 0.0;
@SerializedName("pm2_5")
private Double particulateMatterTwoFive = 0.0;
@SerializedName("pm10")
private Double particulateMatterTen = 0.0;
@SerializedName("nh3")
private Double ammonia = 0.0;
...
}
包裹着
class List
(其实不是列表):
public class List {
@SerializedName("dt")
private int timestamp = 0;
@SerializedName("components")
private AirPollution reading = null;
...
}
包裹着
class AirPollutionResponse
:
public class AirPollutionResponse {
@SerializedName("list")
private List list = null;
...
}
更多字段
空气污染
(相似
dt
,
lat
,
lng
)需要手动设置。
尽管可以映射嵌套类,但类只能被一维映射。
当嵌套变得过于极端时,仍然可以为嵌套值添加getter。