类定义
public class Item {
private String name;
public void setName(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
}
public class SubItemOne extends Item {
private int subItemOneId;
public void setSubItemOneId(int subItemOneId) {
this.subItemOneId = subItemOneId;
}
public int getSubItemOneId() {
return this.subItemOneId;
}
}
public class SubItemTwo extends Item {
private int subItemTwoId;
public void setSubItemTwoId(int subItemTwoId) {
this.subItemTwoId = subItemTwoId;
}
public int getSubItemTwoId() {
return this.subItemTwoId;
}
}
public class SubItemOneList {
private List<Item> itemList;
public List<Item> getItemList() {
return itemList;
}
public void setItemList(List<Item> itemList) {
this.itemList = itemList;
}
}
public class SubItemTwoList {
private List<Item> itemList;
public List<Item> getItemList() {
return itemList;
}
public void setItemList(List<Item> itemList) {
this.itemList = itemList;
}
}
json数据
[{"subItemOneId":"1", "name":"one1"}, {"subItemOneId":"2", "name":"one2"}]
[{"subItemTwoId":"1", "name":"Two1"}, {"subItemTwoId":"2", "name":"Two2"}]
请问我怎么可以让SubItemOneList和SubItemTwoList中List<Item>赋值为List<SubItemOne>和List<SubItemTwo>
我尝试了,但是不是我要的结果,下面是我的测试代码
@JSONType(seeAlso = {SubItemOne.class, SubItemTwo.class})
public class Item {
private String name;
public void setName(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
}
@JSONType(typeName = "SubItemOne")
public class SubItemOne extends Item {
private int subItemOneId;
public void setSubItemOneId(int subItemOneId) {
this.subItemOneId = subItemOneId;
}
public int getSubItemOneId() {
return this.subItemOneId;
}
}
@JSONType(typeName = "SubItemTwo")
public class SubItemTwo extends Item {
private int subItemTwoId;
public void setSubItemTwoId(int subItemTwoId) {
this.subItemTwoId = subItemTwoId;
}
public int getSubItemTwoId() {
return this.subItemTwoId;
}
}
public class SubItemOneList {
private List<Item> itemList;
public List<Item> getItemList() {
return itemList;
}
public void setItemList(List<Item> itemList) {
this.itemList = itemList;
}
}
public class SubItemTwoList {
private List<Item> itemList;
public List<Item> getItemList() {
return itemList;
}
public void setItemList(List<Item> itemList) {
this.itemList = itemList;
}
}
String dataOne = "{itemList:[{\"subItemOneId\":\"1\", \"name\":\"one1\"}, {\"subItemOneId\":\"2\", \"name\":\"one2\"}]}";
String dataTwo = "{itemList: [{\"subItemTwoId\":\"1\", \"name\":\"Two1\"}, {\"subItemTwoId\":\"2\", \"name\":\"Two2\"}]}";
SubItemOneList subItemOneList = JSON.parseObject(dataOne, SubItemOneList.class);
SubItemTwoList subItemTwoList = JSON.parseObject(dataTwo, SubItemTwoList.class);
可能是我前面表述不清楚,我是想SubItemOneList中的List<Item>赋值为List<SubItemOne>, SubItemTwoList中的List<Item>赋值为List<SubItemOne>
下面是等价的实现
JSONObject jsonObject = JSON.parseObject(dataOne);
SubItemOneList subItemOneList1 = new SubItemOneList();
JSONArray jsonArray = jsonObject.getJSONArray("itemList");
List<Item> itemList = new ArrayList<>();
for (int i = 0; i < jsonArray.size(); i++) {
JSONObject jsonObject1 = jsonArray.getJSONObject(i);
SubItemOne subItemOne = new SubItemOne();
subItemOne.setSubItemOneId(jsonObject1.getIntValue("subItemOneId"));
subItemOne.setName(jsonObject1.getString("name"));
itemList.add(subItemOne);
}
subItemOneList1.setItemList(itemList);
我不知道是不是我的用法有问题,如果是请指正
Most helpful comment
https://github.com/alibaba/fastjson/wiki/JSONType_seeAlso_cn