我想使用这种方法:
json.add("myText", getList(id));
函数getList(id)返回一个arraylist,但方法json.add想要一个JsonElement。
那么,我如何在JsonElement中投射一个arraylist?
我测试了这个,但它不起作用:
json.add("myText", (JsonElement)getList(id));
我也测试了这个:
JsonElement jelement = new JsonElement(){
private ArrayList<String> list= new ArrayList<String>(); public ArrayList<String> getList(){ return this.list; }
};
答案 0 :(得分:3)
com.google.gson具有序列化ArrayList(或任何集合)的方法。序列化后,可以使用JSONParser解析字符串:
JSONParser.parse(gson.toJson(getList(id)));
参考:https://sites.google.com/site/gson/gson-user-guide#TOC-Array-Examples
答案 1 :(得分:0)
你无法施展它,我无法看到用API方法转换它的方法。我认为您需要创建自己的方法将列表转换为数组。
e.g。
private JsonElement convertToJsonElement(List<Object> list)
然后这样称呼:
json.add("myText", convertToJsonElement(getList(id)));
或者,如果您有权访问getList
方法,则可以更改此方法以返回JsonElement
答案 2 :(得分:0)
我认为我们需要退后一步,了解你要做的事情。
我假设您要在“myText”和其他对象数组之间创建映射。
为了做到这一点,你只需要调用Gson.toJson(map),其中map将myText和值保存为List或数组。换句话说:
Map<String, List<Object>> mapJson = new LinkedHashMap<String, List<Object>>();
mapJson.put("myText", getList(id));
String outputJson = Gson.toJson(mapJson);
如果这不是你想要的,我恳请你解释你的目标,以便我们可以帮助你以Gson支持的方式而不是你想要的方式来帮助你。
答案 3 :(得分:0)
要从JsonElement
中提取List
,可以使用JsonTree
:
List<String> myList = new ArrayList<>();
jsonObject.add("myList", gson.toJsonTree(myList));