我正在尝试使用json feed创建数据模型。如何在对象中映射混合类型的对象?
base_data
对象的pager
Map<String,String>
和result
为List<Map<String,String>
。是否可以创建另一个类BaseData
来映射对象并导回到模型类?例如:
public class Model{
private Map <String,BaseData> base_data;
}
但是我在getBaseData()
整个代码:
Json对象:
{
"id": "2",
"type":"book",
"base_data": {
"result": [
{
"retailer": "Amazon",
"price": "$50"
},
{
"retailer": "Target",
"price": "$60"
}
],
"pager": {
"current_page": "5",
"link": "www.somesite.com"
}
}
}
模型类
import com.BaseData;
public class Model{
private String id;
private String type;
private Map <String,BaseData> base_data;
public List<Map<String,String>> getBaseData(){
return base_data.get("result");
^^^^^^ Error Type mismatch: cannot convert from BaseData to List<Map<String,String>>
}
}
BaseData类
public class BaseData{
Map<String,String>pager;
List<Map<String,String>> result;
}
答案 0 :(得分:1)
使用以下链接生成pojo类。 只需将您的json响应粘贴到给定的框中,并提供所需的类名称。和其他细节。
点击&#34; Zip&#34; json框下面的按钮。你会得到Java课程。用它。享受..
答案 1 :(得分:1)
将私有地图base_data; 替换为 BaseData base_data;
我测试了以下代码并且工作了。
public class Main {
public static void main(String[] args) {
JsonParser parser = new JsonParser();
JsonObject json = parser.parse("{\"id\":\"2\",\"type\":\"book\",\"base_data\":{\"result\":[{\"retailer\":\"Amazon\",\"price\":\"$50\"},{\"retailer\":\"Target\",\"price\":\"$60\"}],\"pager\":{\"current_page\":\"5\",\"link\":\"www.somesite.com\"}}}").getAsJsonObject();
Gson gson = new Gson();
Model model = gson.fromJson(json, Model.class);
}
}
class Model {
String id;
String type;
BaseData base_data;
}
class BaseData {
Map<String, String> pager;
List<Map<String,String>> result;
}
class Result {
String retailer;
String price;
}
如果您想在方法 getBaseData()上返回List<Map<String,String>>
,可以在方法
List<Map<String,String>>
答案 2 :(得分:1)
您输入错误的类型:
public List<Map<String,String>> getBaseData(){
return base_data.get("result");
}
方法声明应更改为:
public BaseData getBaseData(){
return base_data.get("result");
}
因为通过调用base_data.get("result")
,您基本上从地图内的BaseData类型获取对象。
这应解决混合类型错误,不确定它是否解决了你想要做的事情