2015-09-07 48 views
0

我得到JSON的數據是這樣的:解析一個非頂級JSON數組與GSON TypeToken

{ 
    "crowds": [ 
    { 
     "_id": "55ed5f87cdc20e5b2d7ba546", 
     "name": "The 1 crowd" 
    }, 
    { 
     "_id": "55ed6d1a6cc793110057587d", 
     "name": "testCrowd" 
    }, 
    { 
     "_id": "55ed74e2d960a18c3adb3cd7", 
     "name": "The crowd" 
    } 
    ] 
} 

對應的Crowd類:

public class Crowd { 
    private String _id; 
    private String name; 
} 

我想打開Json-數據轉換爲使用Gson的Crowd對象列表。下面的方法是從官方GSON例子得出:

private static Type listCrowdType = new TypeToken<List<Crowd>>(){}.getType();  
public void handleJsonResponse(String jsonString) { 
     JsonParser jsonParser = new JsonParser(); 
     JsonArray array = jsonParser.parse(jsonString).getAsJsonArray(); 
     List<Crowd> crowds = gson.fromJson(array.get(0), listCrowdType); 
    } 

在這種情況下,GSON告訴我This is not a JSON Array. 我甚至不能指望所有的不同的方法我都試過轉換jsonString並將其傳遞到GSON,但它的從不開心,給我不同的錯誤,如Expected BEGIN_OBJECT but was BEGIN_STRING等。 怎麼辦?

別的東西,我試過:

public void handleJsonResponse(String jsonString) { 
    JsonParser jsonParser = new JsonParser(); 
    JsonElement jsonElement = jsonParser.parse(jsonString); 
    JsonObject jsonObject = jsonElement.getAsJsonObject(); 

    List<Crowd> crowds = gson.fromJson(jsonObject.get("crowds"), listCrowdType); 
} 

錯誤:Expected BEGIN_OBJECT but was STRING

+0

嘗試刪除JSON中列表中的最後一個逗號。你目前有'},]',它可能無法解析。 – Tro

+0

這是從我複製JSON和刪除一些元素,使它更容易閱讀錯誤。實際傳遞的JSON不包含它。 – tsorn

+0

你最後的嘗試應該可以正常工作。這是你解析的唯一JSON嗎?錯誤是否可能來自不同的嘗試? – iagreen

回答

0

你可以試試我下面的代碼:

Gson gson = new Gson(); 
try { 
    JSONObject jsonObject = new JSONObject(jsonString); 
    if (!jsonObject.isNull("crowds")) {      
     JSONArray jsonArray = jsonObject.getJSONArray("crowds"); 
     Crowd[] crowdList = gson.fromJson(jsonArray.toString(), Crowd[].class); 
     List<Crowd> crowds = new ArrayList<>(Arrays.asList(crowdList));  
    }   
} catch (JSONException e) { 
    e.printStackTrace(); 
} 

希望這有助於!