簡體   English   中英

解析 JsonObject 到列表<Map<String, Object> &gt; 使用 Gson?

[英]Parsing JsonObject to List<Map<String, Object>> using Gson?

我正在嘗試將 JSON 對象的字符串表示形式解析為地圖列表。 json 對象的結構如下:

[
 {       
  "first_name": "fname1",
  "last_name": "lname1"
 },
 {
  "first_name": "fname2",
   "last_name": "lname2"
 }
 .
 .
 .
]

唯一已知的是僅運行時的字符串值(例如“first_name”、“last_name”),因此我無法創建任何預定義的類(例如通常在 fromJson() 方法中使用)。

我嘗試創建以下函數(在我在網上看到一些示例之后)但它不起作用:

public List<Map<String, Object>> fromJson(String jsonAsString) {
    final JsonElement jsonElement = this.jsonParser.parse(jsonAsString);

    List<Map<String, Object>> myList= new ArrayList<Map<String, Object>>();
    Type listType = TypeToken.get(myList.getClass()).getType();
    myList= (new Gson()).fromJson(jsonElement, listType);

    return myList;
}   

這個函數的結果是一個列表(在上面的例子中長度 == 2)但是我得到的是 2 個對象而不是 2 個映射。

有什么幫助嗎? 謝謝!

我不太明白您對TypeToken的使用。

TypeToken是通過創建匿名類來捕獲參數化類型(例如List<...> ),該類擴展由您要捕獲的類型參數化的泛型超類型,使用以下語法:

new TypeToken<... type you want to capture ...>() {}.getType()

在您的情況下,應按如下方式使用它:

myList = new Gson().fromJson(jsonAsString, 
    new TypeToken<List<Map<String, Object>>>() {}.getType());

您不能使用這樣的泛型,在運行時List<Map<String, Object>> myListList<Object> myList

您可以嘗試使用一系列地圖

    Gson gson = new Gson();
    Map[] x = new Map[0];
    Map[] fromJson = gson.fromJson("[\r\n" + 
            " {       \r\n" + 
            "  \"first_name\": \"fname1\",\r\n" + 
            "  \"last_name\": \"lname1\"\r\n" + 
            " },\r\n" + 
            " {\r\n" + 
            "  \"first_name\": \"fname2\",\r\n" + 
            "   \"last_name\": \"lname2\"\r\n" + 
            " }]",x.getClass());

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM