Java 使用Gson将json转换为列表
我有一个Json,如下所示:Java 使用Gson将json转换为列表,java,gson,Java,Gson,我有一个Json,如下所示: { "searchResults": { "searchCriteria": { "location": { "originalLocation": null }, "startAndEndDate": { "start": "2016-10-06T00:00:00", "end": "2016-10-09T00:00:00" }, "solution": [ { "resultID": "O1MDc1MD",
{
"searchResults": {
"searchCriteria": {
"location": {
"originalLocation": null
},
"startAndEndDate": {
"start": "2016-10-06T00:00:00",
"end": "2016-10-09T00:00:00"
},
"solution": [
{
"resultID": "O1MDc1MD",
"selected": false,
"charges": {
"localCurrencyCode": "USD",
"averagePricePerNight": 153
},
"starRating": 3.5
},
{
"resultID": "0MDc1MD",
"selected": false,
"charges": {
"localCurrencyCode": "USD",
"averagePricePerNight": 153
},
"starRating": 3.5
}
....
我有一个属性为Starting和averagePricePerNight的班级,基本上形成了我的POJO
class ResponseModel {
Int starRating; Int averagePricePerNight
}
我想解析此JSON并返回一个包含以下内容的列表:
List(ResponseModel(3.5,900), ResponseModel(3.5,100), ResponseModel(4.5,1000))
我试图以列表的形式获取json,但是找不到从json获取两个元素的示例。您可以编写一个自定义反序列化程序:
class Deserializers {
public static ResponseModel responseModelDeserializer(JsonElement json, Type typeOfT,
JsonDeserializationContext context) {
JsonObject obj1 = json.getAsJsonObject();
JsonObject obj2 = obj1.get("charges").getAsJsonObject();
double starRating = obj1.get("starRating").getAsDouble();
int averagePricePerNight = obj2.get("averagePricePerNight").getAsInt();
return new ResponseModel(starRating, averagePricePerNight);
}
}
在构建Gson
时注册它:
Gson gson = new GsonBuilder()
.registerTypeAdapter(ResponseModel.class,
(JsonDeserializer<ResponseModel>) Deserializers::responseModelDeserializer
// ^^^ Cast is needed because the parameter has type Object
)
.create();
因为在您的示例中它似乎是一个,所以我将
starRating
adouble
。首先,您的POJO不是有效的Java。其次,你还没有表现出你尝试过任何东西,那么我们为什么要帮助你呢?@rmlan:刚从scala出来,所以在这里写课程时错过了它。我试着获取数据,但要么我可以获得星号,要么平均价格每晚,我无法获得两者。这仍然不是Java代码。如果你的JSON是有效的,那么提供答案会更容易。也许你应该试试这个网站:
// Get root json object
JsonObject root = new JsonParser().parse(input).getAsJsonObject();
Type tt = new TypeToken<List<ResponseModel>>() {}.getType();
// Get array
List<ResponseModel> mo = gson.fromJson(root.get("solution"), tt);
System.out.println(mo); // [3.5 : 153, 3.5 : 153]
class ResponseModel {
private final double starRating;
private final int averagePricePerNight;
public ResponseModel(double starRating, int averagePricePerNight) {
this.starRating = starRating;
this.averagePricePerNight = averagePricePerNight;
}
@Override
public String toString() {
return String.format("%s : %s", starRating, averagePricePerNight);
}
}