使用GSON解析JSON数据

时间:2014-07-16 07:38:47

标签: android json gson

我有以下JSON数据,我想用GSON libray解析。其中存在小问题,需要专家的一些指导。

{"Values":{"Items":[{"Key":"LastUpdateLabel","Value":"Last Update"}]}}

public class Values {
    private List<Item> Items;

    /**
     * @return the items
     */
    public List<Item> getItems() {
        return Items;
    }

    /**
     * @param items
     *            the items to set
     */
    public void setItems(List<Item> items) {
        Items = items;
    }

}

final Values val = new Gson().fromJson(res, Values.class);
List<Item> items = val.getItems();
Log.i(TAG, "Val size = " + items.size());

if (items != null && !items.isEmpty()) {
    for (Item item : items) {
        Log.i(TAG, "Key = " + item.getKey());
        Log.i(TAG, "Value = " + item.getValue());
    }
}

但它不起作用。任何人都可以帮助我理解这一点,因为我是GSON的新手。

3 个答案:

答案 0 :(得分:1)

您需要另一个包含values字段的类:

public class JsonData {
    private Values values;
}

public class Values {
    private List<Item> items;
}

public class Item {
    private String key;
    private String value;
}

要解析Json,我使用用FieldNamingPolicy.UPPER_CAMEL_CASE创建的Gson,所以我可以使用Java命名约定来变量名:

Gson gson = new GsonBuilder().setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE).create();

JsonData val = gson.fromJson(res, JsonData.class);

如果您不想使用FieldNamingPolicy.UPPER_CAMEL_CASE,请将变量名称转换为String KeyString Value等。但我认为遵循Java命名约定会更好。

答案 1 :(得分:0)

为此,我正在使用com.google.api.client.json.gson.GsonFactory

public static Object parseClass(Class clazz, String object) {
    try {
        GsonFactory instance = GsonFactory.getDefaultInstance();
        return instance.fromString(object, clazz);
    } catch (IOException e) {
        LogUtil.loge(TAG, "Error while parsing JSON object");
        return null;
    }
}

答案 2 :(得分:0)

我不太了解gson / json,但我尝试过实现这样的解析:

public static List<LevelModel> getLevels(){
    Gson gson = new Gson();
    List<LevelModel> levels;

    String levelsJson = Gdx.files.internal("data/world/levels.json").readString();
    levels = Arrays.asList(gson.fromJson(levelsJson, LevelModel[].class));

    return levels;
}