Parsing JSON array into java.util.List with Gson
我有一个叫
1 2 3 4 5 6 7 8 9 | { "client":"127.0.0.1", "servers": [ "8.8.8.8", "8.8.4.4", "156.154.70.1", "156.154.71.1" ] } |
我知道我可以用以下方法得到阵列
1 | mapping.get("servers").getAsJsonArray() |
现在我想把那个
最简单的方法是什么?
当然,最简单的方法是使用GSON的默认解析函数
当需要反序列化到任何
在您的例子中,只需获取
1 2 3 4 5 6 7 | import java.lang.reflect.Type; import com.google.gson.reflect.TypeToken; JsonElement yourJson = mapping.get("servers"); Type listType = new TypeToken<List<String>>() {}.getType(); List<String> yourList = new Gson().fromJson(yourJson, listType); |
在你的例子中,
您可能需要查看GSONAPI文档。
下面的代码使用的是
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | import java.util.ArrayList; import com.google.gson.Gson; import com.google.gson.JsonArray; import com.google.gson.JsonObject; import com.google.gson.JsonParser; public class Test { static String str ="{"+ ""client":"127.0.0.1"," + ""servers":[" + " "8.8.8.8"," + " "8.8.4.4"," + " "156.154.70.1"," + " "156.154.71.1"" + " ]" + "}"; public static void main(String[] args) { // TODO Auto-generated method stub try { JsonParser jsonParser = new JsonParser(); JsonObject jo = (JsonObject)jsonParser.parse(str); JsonArray jsonArr = jo.getAsJsonArray("servers"); //jsonArr. Gson googleJson = new Gson(); ArrayList jsonObjList = googleJson.fromJson(jsonArr, ArrayList.class); System.out.println("List size is :"+jsonObjList.size()); System.out.println("List Elements are :"+jsonObjList.toString()); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } } |
产量
我在这里阅读了GSON官方网站上的解决方案
以下代码适用于您:
1 2 3 4 5 6 7 8 9 10 11 12 13 | String json ="{"client":"127.0.0.1","servers":["8.8.8.8","8.8.4.4","156.154.70.1","156.154.71.1"]}"; JsonObject jsonObject = new Gson().fromJson(json, JsonObject.class); JsonArray jsonArray = jsonObject.getAsJsonArray("servers"); String[] arrName = new Gson().fromJson(jsonArray, String[].class); List<String> lstName = new ArrayList<>(); lstName = Arrays.asList(arrName); for (String str : lstName) { System.out.println(str); } |
监视器上显示的结果:
1 2 3 4 | 8.8.8.8 8.8.4.4 156.154.70.1 156.154.71.1 |
我能够让列表映射只使用
通过调试器运行下面步骤4中的代码,我可以观察到用JSON数据填充的
下面是一个例子:
1。JSON
1 2 3 4 5 6 7 8 9 10 11 12 13 | { "name":"Some House", "gallery": [ { "description":"Nice 300sqft. den.jpg", "photo_url":"image/den.jpg" }, { "description":"Floor Plan", "photo_url":"image/floor_plan.jpg" } ] } |
2。带列表的Java类
1 2 3 4 5 6 7 8 | public class FocusArea { @SerializedName("name") private String mName; @SerializedName("gallery") private List<ContentImage> mGalleryImages; } |
三。列表项目的Java类
1 2 3 4 5 6 7 8 9 10 |
4。处理JSON的Java代码
1 2 3 4 5 | for (String key : focusAreaKeys) { JsonElement sectionElement = sectionsJsonObject.get(key); FocusArea focusArea = gson.fromJson(sectionElement, FocusArea.class); } |