使用Gson将JSON数组解析为java.util.List

Abe*_*ejo 104 java parsing json gson

我有一个JsonObject名为"mapping"以下内容:

{
    "client": "127.0.0.1",
    "servers": [
        "8.8.8.8",
        "8.8.4.4",
        "156.154.70.1",
        "156.154.71.1"
    ]
}
Run Code Online (Sandbox Code Playgroud)

我知道我可以得到数组"servers":

mapping.get("servers").getAsJsonArray()
Run Code Online (Sandbox Code Playgroud)

现在我想解析JsonArrayjava.util.List...

最简单的方法是什么?

Mik*_*ikO 250

绝对最简单的方法是使用Gson的默认解析功能fromJson().

当你需要反序列化为任何ParameterizedType(例如,任何List)时,这个函数的实现是适合的fromJson(JsonElement json, Type typeOfT).

在您的情况下,您只需要获取Typea List<String>,然后将JSON数组解析为Type,如下所示:

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);
Run Code Online (Sandbox Code Playgroud)

在你的情况下yourJson是a JsonElement,但它也可以是a String,any Reader或a JsonReader.

您可能需要查看Gson API文档.

  • `Type`是一个Java内置接口,位于包`java.lang.reflect`中 (9认同)
  • `type`可以在什么包中找到? (6认同)

Pra*_*eek 18

下面的代码正在使用com.google.gson.JsonArray.我已经打印了列表中的元素数量以及List中的元素

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();
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

OUTPUT

List size is : 4

List Elements are  : [8.8.8.8, 8.8.4.4, 156.154.70.1, 156.154.71.1]
Run Code Online (Sandbox Code Playgroud)


Hoa*_*ang 5

我在这里从Gson的官方网站阅读解决方案

并为您提供以下代码:

    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);
    }    
Run Code Online (Sandbox Code Playgroud)

结果显示在监视器上:

8.8.8.8
8.8.4.4
156.154.70.1
156.154.71.1
Run Code Online (Sandbox Code Playgroud)