从json字符串中读取Gson

时间:2012-10-15 11:57:26

标签: android json gson

JSON响应字符串:

{
    "1": {
        "registered_name": "Manchester Cars",
        "search_tag": null,
        "town": "Manchester",
        "distance": "1.03782874345779",
        "capacity": 4,
        "first_address_line": null,
        "price": "165.00",
        "cost_per_person": "165.00",
        "trip_direction": 1,
        "mco_id": "826",
        "tag": ""
    },
    "2": {
        "registered_name": "Avon Cars",
        "search_tag": null,
        "town": "Solihull",
        "distance": "3.39530396461487",
        "capacity": 4,
        "first_address_line": null,
        "price": "140.82",
        "cost_per_person": "140.82",
        "trip_direction": 1,
        "mco_id": "670",
        "tag": ""
    },
    "3": {
        "registered_name": "BBS Executive",
        "search_tag": null,
        "town": "Birmingham",
        "distance": "11.7371127605438",
        "capacity": 4,
        "first_address_line": null,
        "price": "186.17",
        "cost_per_person": "186.17",
        "trip_direction": 1,
        "mco_id": "615",
        "tag": ""
    },
    "4": {
        "registered_name": "Sky Cars",
        "search_tag": null,
        "town": "Birmingham",
        "distance": "14.4878869056702",
        "capacity": 4,
        "first_address_line": null,
        "price": "179.13",
        "cost_per_person": "179.13",
        "trip_direction": 1,
        "mco_id": "822",
        "tag": ""
    },
    "": {
        "registered_name": "Eco Cars Manchester",
        "search_tag": null,
        "town": "Stockport",
        "distance": "9.5043933391571",
        "capacity": 4,
        "first_address_line": null,
        "price": "155.00",
        "cost_per_person": "155.00",
        "trip_direction": 1,
        "mco_id": "774",
        "tag": ""
    }
}

我想转换这个json响应,我正在使用以下GSON代码但无法转换,

尝试解决方案1 ​​

Gson gson = new Gson();         
Item[] itemList = gson.fromJson(jstring, Item[].class);    
Type collectionType = new TypeToken<Collection<Item>>(){}.getType();
List<Item> enums =  gson.fromJson(jstring, collectionType);

尝试解决方案2

Gson gson = new Gson();         
Item[] itemList = gson.fromJson(jstring, Item[].class);

其中jstring是上面打印的json响应。

失败: java.lang.IllegalStateException:预期为BEGIN_ARRAY但在第1行第2列为BEGIN_OBJECT

2 个答案:

答案 0 :(得分:2)

您的JSON响应不是JSON数组。它是一个JSON对象。这是导致错误的原因。见www.json.org

答案 1 :(得分:1)

您可以尝试使用Genson http://code.google.com/p/genson/。 以下代码可以解决您的问题。

Map<String, Item> itemsMap = new Genson().deserialize(jsonString, new GenericType<Map<String, Item>>() {});
// get all the items independently from their keys
Collection<Items> items = itemsMap.values();