Ich habe ein JsonObject
mit dem Namen "mapping"
mit dem folgenden Inhalt:
{
"client": "127.0.0.1",
"servers": [
"8.8.8.8",
"8.8.4.4",
"156.154.70.1",
"156.154.71.1"
]
}
Ich weiß, dass ich das Array "server"
mit bekommen kann:
mapping.get("servers").getAsJsonArray()
Und nun möchte ich dieses JsonArray
in eine java.util.List
parsen...
Was ist der einfachste Weg, dies zu tun?
Der einfachste Weg, dies zu tun, ist die Verwendung von Gson's Standard-Parsing-Funktion fromJson()
.
Es gibt eine Implementierung dieser Funktion, die geeignet ist, wenn Sie in einen beliebigen ParameterizedType
(z.B. eine beliebige List
) deserialisieren müssen, nämlich fromJson(JsonElement json, Type typeOfT)
.
In Ihrem Fall müssen Sie nur den Type
einer List<String>
ermitteln und dann das JSON-Array in diesen Type
parsen, etwa so:
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);
In Ihrem Fall ist IhrJson
ein JsonElement
, aber es könnte auch ein String
, ein Reader
oder ein JsonReader
sein.
Sie sollten einen Blick in die Gson API Dokumentation werfen.
Der folgende Code verwendet "com.google.gson.JsonArray". Ich habe die Anzahl der Elemente in der Liste sowie die Elemente in der Liste gedruckt
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();
}
}
}
OUTPUT
List size is : 4
List Elements are : [8.8.8.8, 8.8.4.4, 156.154.70.1, 156.154.71.1]
Ich habe die Lösung auf der offiziellen Website von Gson unter hier gelesen.
Und dieser Code für Sie:
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);
}
Ergebnis wird auf dem Monitor angezeigt:
8.8.8.8
8.8.4.4
156.154.70.1
156.154.71.1